Skip to content

Commit f464e89

Browse files
authored
Merge pull request #1034 from lightpanda-io/persistent-promise
Clean Up Persistent Promises in Dynamic Import
2 parents cdc439c + 7eb53ca commit f464e89

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

src/runtime/js.zig

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1689,6 +1689,11 @@ pub fn Env(comptime State: type, comptime WebApis: type) type {
16891689
specifier: []const u8,
16901690
module: v8.Persistent(v8.Module),
16911691
resolver: v8.Persistent(v8.PromiseResolver),
1692+
1693+
pub fn deinit(ev: *@This()) void {
1694+
ev.module.deinit();
1695+
ev.resolver.deinit();
1696+
}
16921697
};
16931698

16941699
const ev_data = try self.context_arena.create(EvaluationData);
@@ -1705,6 +1710,7 @@ pub fn Env(comptime State: type, comptime WebApis: type) type {
17051710
const cb_isolate = cb_info.getIsolate();
17061711
const cb_context = cb_isolate.getCurrentContext();
17071712
const data: *EvaluationData = @ptrCast(@alignCast(cb_info.getExternalValue()));
1713+
defer data.deinit();
17081714
const cb_module = data.module.castToModule();
17091715
const cb_resolver = data.resolver.castToPromiseResolver();
17101716

@@ -1719,6 +1725,7 @@ pub fn Env(comptime State: type, comptime WebApis: type) type {
17191725
const cb_info = v8.FunctionCallbackInfo{ .handle = info.? };
17201726
const cb_context = cb_info.getIsolate().getCurrentContext();
17211727
const data: *EvaluationData = @ptrCast(@alignCast(cb_info.getExternalValue()));
1728+
defer data.deinit();
17221729
const cb_resolver = data.resolver.castToPromiseResolver();
17231730

17241731
log.err(.js, "dynamic import failed", .{ .specifier = data.specifier });
@@ -1731,6 +1738,7 @@ pub fn Env(comptime State: type, comptime WebApis: type) type {
17311738
.specifier = specifier,
17321739
.line = try_catch.sourceLineNumber() orelse 0,
17331740
});
1741+
defer ev_data.deinit();
17341742
const error_msg = v8.String.initUtf8(iso, "Evaluation is a promise");
17351743
_ = resolver.reject(ctx, error_msg.toValue());
17361744
return;

0 commit comments

Comments
 (0)