aboutsummaryrefslogtreecommitdiff
path: root/src/javascript
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-14 23:36:45 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-14 23:36:45 -0700
commit7b8113c7c70bb3bf6916404123e1c30c233a2d6c (patch)
tree1682386ef7be08e58f5b8d03aa03be52de4e453d /src/javascript
parent2d1538e698654150a00a1b2187dfc811a0d15395 (diff)
downloadbun-7b8113c7c70bb3bf6916404123e1c30c233a2d6c.tar.gz
bun-7b8113c7c70bb3bf6916404123e1c30c233a2d6c.tar.zst
bun-7b8113c7c70bb3bf6916404123e1c30c233a2d6c.zip
Fix bug causing GC to sometimes never run
Diffstat (limited to 'src/javascript')
-rw-r--r--src/javascript/jsc/bindings/bindings.cpp8
-rw-r--r--src/javascript/jsc/bindings/bindings.zig9
2 files changed, 15 insertions, 2 deletions
diff --git a/src/javascript/jsc/bindings/bindings.cpp b/src/javascript/jsc/bindings/bindings.cpp
index e9ee4b380..874cc78e8 100644
--- a/src/javascript/jsc/bindings/bindings.cpp
+++ b/src/javascript/jsc/bindings/bindings.cpp
@@ -7,6 +7,7 @@
#include <JavaScriptCore/BytecodeIndex.h>
#include <JavaScriptCore/CodeBlock.h>
#include <JavaScriptCore/Completion.h>
+#include <JavaScriptCore/DeferredWorkTimer.h>
#include <JavaScriptCore/ErrorInstance.h>
#include <JavaScriptCore/ExceptionHelpers.h>
#include <JavaScriptCore/ExceptionScope.h>
@@ -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<const unsigned char*>(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 25adec479..ed83e6e14 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 {