diff --git a/.github/release-nest-v3 b/.github/release-nest-v3 index 56a6051..d8263ee 100644 --- a/.github/release-nest-v3 +++ b/.github/release-nest-v3 @@ -1 +1 @@ -1 \ No newline at end of file +2 \ No newline at end of file diff --git a/falcond/build.zig b/falcond/build.zig index 44ca13d..98620b1 100644 --- a/falcond/build.zig +++ b/falcond/build.zig @@ -4,13 +4,17 @@ pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); - const exe = b.addExecutable(.{ - .name = "falcond", + const main_module = b.createModule(.{ .root_source_file = .{ .cwd_relative = "src/main.zig" }, .target = target, .optimize = optimize, }); + const exe = b.addExecutable(.{ + .name = "falcond", + .root_module = main_module, + }); + exe.bundle_compiler_rt = true; b.installArtifact(exe); diff --git a/falcond/build.zig.zon b/falcond/build.zig.zon index 5929a5e..32876d6 100644 --- a/falcond/build.zig.zon +++ b/falcond/build.zig.zon @@ -6,12 +6,12 @@ // // It is redundant to include "zig" in this name because it is already // within the Zig package namespace. - .name = "falcond", + .name = .falcond, // This is a [Semantic Version](https://semver.org/). // In a future version of Zig it will be used for package deduplication. .version = "0.1.0", - + .fingerprint = 0x31d9d78a54cab47b, // This field is optional. // This is currently advisory only; Zig does not yet do anything // with this value. diff --git a/falcond/debian/changelog b/falcond/debian/changelog index 5d4974a..289fb97 100644 --- a/falcond/debian/changelog +++ b/falcond/debian/changelog @@ -1,3 +1,9 @@ +falcond (1.1.1-101pika1) pika; urgency=low + + * Update to support latest zig + + -- ferreo Sun, 12 Jan 2025 13:48:00 +0300 + falcond (1.1.0-101pika1) pika; urgency=low * Fix memory leak on error, fix power ppd being required for falcond to launch. diff --git a/falcond/src/main.zig b/falcond/src/main.zig index 5ebba47..57552f0 100644 --- a/falcond/src/main.zig +++ b/falcond/src/main.zig @@ -1,6 +1,6 @@ const std = @import("std"); const Daemon = @import("daemon.zig").Daemon; - +const builtin = @import("builtin"); pub const std_options = std.Options{ .log_level = .debug, .log_scope_levels = &[_]std.log.ScopeLevel{ @@ -29,19 +29,25 @@ const AllocTracker = struct { const config_path: []const u8 = "/etc/falcond/config.conf"; const system_conf_path: []const u8 = "/usr/share/falcond/system.conf"; -fn alloc(ctx: *anyopaque, len: usize, ptr_align: u8, ret_addr: usize) ?[*]u8 { +fn alloc(ctx: *anyopaque, len: usize, ptr_align: std.mem.Alignment, ret_addr: usize) ?[*]u8 { var t: *AllocTracker = @ptrCast(@alignCast(ctx)); t.trackAlloc(); return gpa_vtable.alloc(gpa_ptr, len, ptr_align, ret_addr); } -fn resize(ctx: *anyopaque, buf: []u8, log2_buf_align: u8, new_len: usize, ret_addr: usize) bool { +fn resize(ctx: *anyopaque, buf: []u8, log2_buf_align: std.mem.Alignment, new_len: usize, ret_addr: usize) bool { var t: *AllocTracker = @ptrCast(@alignCast(ctx)); t.trackResize(); return gpa_vtable.resize(gpa_ptr, buf, log2_buf_align, new_len, ret_addr); } -fn free(ctx: *anyopaque, buf: []u8, log2_buf_align: u8, ret_addr: usize) void { +fn remap(ctx: *anyopaque, buf: []u8, log2_buf_align: std.mem.Alignment, new_len: usize, ret_addr: usize) ?[*]u8 { + var t: *AllocTracker = @ptrCast(@alignCast(ctx)); + t.trackResize(); + return gpa_vtable.remap(gpa_ptr, buf, log2_buf_align, new_len, ret_addr); +} + +fn free(ctx: *anyopaque, buf: []u8, log2_buf_align: std.mem.Alignment, ret_addr: usize) void { var t: *AllocTracker = @ptrCast(@alignCast(ctx)); t.trackDealloc(); gpa_vtable.free(gpa_ptr, buf, log2_buf_align, ret_addr); @@ -49,16 +55,20 @@ fn free(ctx: *anyopaque, buf: []u8, log2_buf_align: u8, ret_addr: usize) void { var gpa_vtable: *const std.mem.Allocator.VTable = undefined; var gpa_ptr: *anyopaque = undefined; +var debug_allocator: std.heap.DebugAllocator(.{}) = .init; pub fn main() !void { std.log.info("Starting falcond...", .{}); - + var allocator: std.mem.Allocator = undefined; var tracker = AllocTracker{}; - var gpa = std.heap.GeneralPurposeAllocator(.{ - .verbose_log = false, - .enable_memory_limit = true, - }){}; - defer { - const leaked = gpa.deinit(); + const gpa, const is_debug = gpa: { + break :gpa switch (builtin.mode) { + .Debug, .ReleaseSafe => .{ debug_allocator.allocator(), true }, + .ReleaseFast, .ReleaseSmall => .{ std.heap.smp_allocator, false }, + }; + }; + allocator = gpa; + defer if (is_debug) { + const leaked = debug_allocator.deinit(); if (leaked == .leak) { std.log.err("Memory leaks detected!", .{}); } @@ -67,18 +77,20 @@ pub fn main() !void { tracker.deallocs, tracker.resizes, }); - } - - gpa_vtable = gpa.allocator().vtable; - gpa_ptr = gpa.allocator().ptr; - const allocator = std.mem.Allocator{ - .ptr = &tracker, - .vtable = &std.mem.Allocator.VTable{ - .alloc = alloc, - .resize = resize, - .free = free, - }, }; + if (is_debug) { + gpa_vtable = gpa.vtable; + gpa_ptr = gpa.ptr; + allocator = std.mem.Allocator{ + .ptr = &tracker, + .vtable = &std.mem.Allocator.VTable{ + .alloc = alloc, + .resize = resize, + .free = free, + .remap = remap, + }, + }; + } const args = try std.process.argsAlloc(allocator); defer std.process.argsFree(allocator, args); diff --git a/main.sh b/main.sh index afddc9a..84ba423 100755 --- a/main.sh +++ b/main.sh @@ -2,7 +2,7 @@ set -e -VERSION="1.1.0" +VERSION="1.1.1" source ./pika-build-config.sh