From 7eb53ca2bc02f7811ad4108ebb98fe072025ca01 Mon Sep 17 00:00:00 2001 From: Muki Kiboigo Date: Tue, 9 Sep 2025 10:54:02 -0700 Subject: [PATCH] deinit persistent in dynamic import --- src/runtime/js.zig | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/runtime/js.zig b/src/runtime/js.zig index 32f1e382..032d40f4 100644 --- a/src/runtime/js.zig +++ b/src/runtime/js.zig @@ -1668,6 +1668,11 @@ pub fn Env(comptime State: type, comptime WebApis: type) type { specifier: []const u8, module: v8.Persistent(v8.Module), resolver: v8.Persistent(v8.PromiseResolver), + + pub fn deinit(ev: *@This()) void { + ev.module.deinit(); + ev.resolver.deinit(); + } }; const ev_data = try self.context_arena.create(EvaluationData); @@ -1684,6 +1689,7 @@ pub fn Env(comptime State: type, comptime WebApis: type) type { const cb_isolate = cb_info.getIsolate(); const cb_context = cb_isolate.getCurrentContext(); const data: *EvaluationData = @ptrCast(@alignCast(cb_info.getExternalValue())); + defer data.deinit(); const cb_module = data.module.castToModule(); const cb_resolver = data.resolver.castToPromiseResolver(); @@ -1698,6 +1704,7 @@ pub fn Env(comptime State: type, comptime WebApis: type) type { const cb_info = v8.FunctionCallbackInfo{ .handle = info.? }; const cb_context = cb_info.getIsolate().getCurrentContext(); const data: *EvaluationData = @ptrCast(@alignCast(cb_info.getExternalValue())); + defer data.deinit(); const cb_resolver = data.resolver.castToPromiseResolver(); log.err(.js, "dynamic import failed", .{ .specifier = data.specifier }); @@ -1710,6 +1717,7 @@ pub fn Env(comptime State: type, comptime WebApis: type) type { .specifier = specifier, .line = try_catch.sourceLineNumber() orelse 0, }); + defer ev_data.deinit(); const error_msg = v8.String.initUtf8(iso, "Evaluation is a promise"); _ = resolver.reject(ctx, error_msg.toValue()); return;