aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/javascript.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js/javascript.zig')
-rw-r--r--src/bun.js/javascript.zig19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/bun.js/javascript.zig b/src/bun.js/javascript.zig
index 07c5318b2..9ba69aaa2 100644
--- a/src/bun.js/javascript.zig
+++ b/src/bun.js/javascript.zig
@@ -273,7 +273,8 @@ comptime {
_ = Bun__getDefaultGlobal;
_ = Bun__getVM;
_ = Bun__drainMicrotasks;
- _ = Bun__queueMicrotask;
+ _ = Bun__queueTask;
+ _ = Bun__queueTaskConcurrently;
_ = Bun__handleRejectedPromise;
_ = Bun__readOriginTimer;
_ = Bun__onDidAppendPlugin;
@@ -281,10 +282,24 @@ comptime {
}
}
-pub export fn Bun__queueMicrotask(global: *JSGlobalObject, task: *JSC.CppTask) void {
+/// This function is called on the main thread
+/// The bunVM() call will assert this
+pub export fn Bun__queueTask(global: *JSGlobalObject, task: *JSC.CppTask) void {
global.bunVM().eventLoop().enqueueTask(Task.init(task));
}
+/// This function is called on another thread
+/// The main difference: we need to allocate the task & wakeup the thread
+/// We can avoid that if we run it from the main thread.
+pub export fn Bun__queueTaskConcurrently(global: *JSGlobalObject, task: *JSC.CppTask) void {
+ var concurrent = bun.default_allocator.create(JSC.ConcurrentTask) catch unreachable;
+ concurrent.* = JSC.ConcurrentTask{
+ .task = Task.init(task),
+ .auto_delete = true,
+ };
+ global.bunVMConcurrently().eventLoop().enqueueTaskConcurrent(concurrent);
+}
+
pub export fn Bun__handleRejectedPromise(global: *JSGlobalObject, promise: *JSC.JSPromise) void {
const result = promise.result(global.vm());
global.bunVM().runErrorHandler(result, null);