allocate task for ThreadSafeFunction (#4513)

* create thread safe function task

* Update napi.zig

* Update napi.zig
This commit is contained in:
Dylan Conway
2023-09-06 02:04:00 -07:00
committed by GitHub
parent 7c82dc86ba
commit daaac7792c
3 changed files with 18 additions and 4 deletions

View File

@@ -347,6 +347,10 @@ pub const ConcurrentTask = struct {
return created;
}
pub fn createFrom(task: anytype) *ConcurrentTask {
return create(Task.init(task));
}
pub fn fromCallback(ptr: anytype, comptime callback: anytype) *ConcurrentTask {
return create(ManagedTask.New(std.meta.Child(@TypeOf(ptr)), callback).init(ptr));
}

View File

@@ -93,6 +93,10 @@ pub const AsyncReaddirTask = struct {
var node_fs = NodeFS{};
this.result = node_fs.readdir(this.args, .promise);
if (this.result == .err) {
this.result.err.path = bun.default_allocator.dupe(u8, this.result.err.path) catch "";
}
this.globalObject.bunVMConcurrently().eventLoop().enqueueTaskConcurrent(JSC.ConcurrentTask.fromCallback(this, runFromJSThread));
}
@@ -370,6 +374,10 @@ pub const AsyncReadFileTask = struct {
var node_fs = NodeFS{};
this.result = node_fs.readFile(this.args, .promise);
if (this.result == .err) {
this.result.err.path = bun.default_allocator.dupe(u8, this.result.err.path) catch "";
}
this.globalObject.bunVMConcurrently().eventLoop().enqueueTaskConcurrent(JSC.ConcurrentTask.fromCallback(this, runFromJSThread));
}
@@ -460,6 +468,10 @@ pub const AsyncCopyFileTask = struct {
var node_fs = NodeFS{};
this.result = node_fs.copyFile(this.args, .promise);
if (this.result == .err) {
this.result.err.path = bun.default_allocator.dupe(u8, this.result.err.path) catch "";
}
this.globalObject.bunVMConcurrently().eventLoop().enqueueTaskConcurrent(JSC.ConcurrentTask.fromCallback(this, runFromJSThread));
}

View File

@@ -1215,8 +1215,6 @@ pub const ThreadSafeFunction = struct {
owning_threads: std.AutoArrayHashMapUnmanaged(u64, void) = .{},
owning_thread_lock: Lock = Lock.init(),
event_loop: *JSC.EventLoop,
concurrent_task: JSC.ConcurrentTask = .{},
concurrent_finalizer_task: JSC.ConcurrentTask = .{},
env: napi_env,
@@ -1323,7 +1321,7 @@ pub const ThreadSafeFunction = struct {
}
}
this.event_loop.enqueueTaskConcurrent(this.concurrent_task.from(this, .manual_deinit));
this.event_loop.enqueueTaskConcurrent(JSC.ConcurrentTask.createFrom(this));
}
pub fn finalize(opaq: *anyopaque) void {
@@ -1372,7 +1370,7 @@ pub const ThreadSafeFunction = struct {
if (this.owning_threads.count() == 0) {
this.finalizer_task = JSC.AnyTask{ .ctx = this, .callback = finalize };
this.event_loop.enqueueTaskConcurrent(this.concurrent_finalizer_task.from(&this.finalizer_task, .manual_deinit));
this.event_loop.enqueueTaskConcurrent(JSC.ConcurrentTask.fromCallback(this, finalize));
return;
}
}