From 7b8113c7c70bb3bf6916404123e1c30c233a2d6c Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Mon, 14 Mar 2022 23:36:45 -0700 Subject: [PATCH] Fix bug causing GC to sometimes never run --- src/javascript/jsc/bindings/bindings.cpp | 8 +++++++- src/javascript/jsc/bindings/bindings.zig | 9 ++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/javascript/jsc/bindings/bindings.cpp b/src/javascript/jsc/bindings/bindings.cpp index e9ee4b380e..874cc78e86 100644 --- a/src/javascript/jsc/bindings/bindings.cpp +++ b/src/javascript/jsc/bindings/bindings.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -740,7 +741,7 @@ JSC__JSValue ZigString__to16BitValue(const ZigString* arg0, JSC__JSGlobalObject* return JSC::JSValue::encode(JSC::JSValue(JSC::jsString(arg1->vm(), str))); } -void free_global_string(void* str, void* ptr, unsigned len) +static void free_global_string(void* str, void* ptr, unsigned len) { ZigString__free_global(reinterpret_cast(ptr), len); } @@ -2179,6 +2180,11 @@ void JSC__VM__deferGC(JSC__VM* vm, void* ctx, void (*callback)(void* arg0)) callback(ctx); } +void JSC__VM__doWork(JSC__VM* vm) +{ + vm->deferredWorkTimer->runRunLoop(); +} + void JSC__VM__deleteAllCode(JSC__VM* arg1, JSC__JSGlobalObject* globalObject) { JSC::JSLockHolder locker(globalObject->vm()); diff --git a/src/javascript/jsc/bindings/bindings.zig b/src/javascript/jsc/bindings/bindings.zig index 25adec4796..ed83e6e14b 100644 --- a/src/javascript/jsc/bindings/bindings.zig +++ b/src/javascript/jsc/bindings/bindings.zig @@ -2502,7 +2502,14 @@ pub const VM = extern struct { }); } - pub const Extern = [_][]const u8{ "deferGC", "holdAPILock", "runGC", "generateHeapSnapshot", "isJITEnabled", "deleteAllCode", "create", "deinit", "setExecutionForbidden", "executionForbidden", "isEntered", "throwError", "drainMicrotasks", "whenIdle", "shrinkFootprint", "setExecutionTimeLimit", "clearExecutionTimeLimit" }; + pub fn doWork( + vm: *VM, + ) void { + return cppFn("doWork", .{ + vm, + }); + } + pub const Extern = [_][]const u8{ "doWork", "deferGC", "holdAPILock", "runGC", "generateHeapSnapshot", "isJITEnabled", "deleteAllCode", "create", "deinit", "setExecutionForbidden", "executionForbidden", "isEntered", "throwError", "drainMicrotasks", "whenIdle", "shrinkFootprint", "setExecutionTimeLimit", "clearExecutionTimeLimit" }; }; pub const ThrowScope = extern struct {