From 8896f31ae9372d26c15fd2e10cf081a343efb460 Mon Sep 17 00:00:00 2001 From: Matheus Catarino Date: Fri, 26 Apr 2024 15:45:27 -0300 Subject: [PATCH] add leak detector --- build.zig | 9 +++++---- build.zig.zon | 2 +- examples/example1.d | 6 +++--- examples/example3.d | 3 ++- examples/example4.d | 2 +- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/build.zig b/build.zig index 012cb1f..8d3a531 100644 --- a/build.zig +++ b/build.zig @@ -16,10 +16,8 @@ pub fn build(b: *std.Build) !void { const config = optionsDefault(b, .{ .target = target, .optimize = optimize }); const bdwgc = buildLibGC(b, config); - const libgc = if (config.enable_throw_bad_alloc_library) - bdwgc.artifact("gctba") // libgc + libgctba - else - bdwgc.artifact("gc"); + const libgc = bdwgc.artifact("gc"); + const libgctba = if (config.enable_throw_bad_alloc_library) bdwgc.artifact("gctba") else null; const libgccxx: ?*std.Build.Step.Compile = if (config.enable_cplusplus) bdwgc.artifact("gccpp") else null; // generate di file (like, zig-translate-c from D-importC) @@ -151,6 +149,9 @@ pub fn build(b: *std.Build) !void { if (libgccxx) |cxx| { b.installArtifact(cxx); } + if (libgctba) |tba| { + b.installArtifact(tba); + } } } fn buildD(b: *std.Build, options: abs.DCompileStep) !void { diff --git a/build.zig.zon b/build.zig.zon index 03d39a2..a92f47b 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -1,6 +1,6 @@ .{ .name = "bdwgc-d", - .version = "0.2.0", + .version = "0.3.0", .dependencies = .{ .abs = .{ .url = "git+https://github.com/kassane/anotherBuildStep#main", diff --git a/examples/example1.d b/examples/example1.d index 2e2d6bd..00c715a 100644 --- a/examples/example1.d +++ b/examples/example1.d @@ -9,9 +9,9 @@ void main() foreach (i; 0 .. max) { - auto p = cast(int**) GC_malloc(size_t.sizeof); - auto q = cast(int*) GC_malloc(size_t.sizeof); - *p = cast(int*) GC_realloc(q, size_t.sizeof * 2); + auto p = cast(int**) GC_MALLOC_ATOMIC(size_t.sizeof); + auto q = cast(int*) GC_MALLOC(size_t.sizeof); + *p = cast(int*) GC_REALLOC(q, size_t.sizeof * 2); if (i % 100_000 == 0) { const heap = GC_get_heap_size(); diff --git a/examples/example3.d b/examples/example3.d index 13c7317..b5fc817 100644 --- a/examples/example3.d +++ b/examples/example3.d @@ -4,13 +4,14 @@ import core.thread; void main() { + GC_set_find_leak(1); GC_init(); // Initialize GC GC_enable_incremental(); GC_start_incremental_collection(); auto t = new Thread(() { - int* numbers = cast(int*) GC_malloc(100 * int.sizeof); + int* numbers = cast(int*) GC_MALLOC(100 * int.sizeof); // Populate array foreach (i; 0 .. 100) diff --git a/examples/example4.d b/examples/example4.d index a0c51f8..85494ed 100644 --- a/examples/example4.d +++ b/examples/example4.d @@ -15,8 +15,8 @@ extern (C++) extern (C) void main() { - GC_init(); GC_set_all_interior_pointers(1); + GC_init(); auto p1 = newPerson(); auto p2 = newPerson();