diff options
author | 2023-09-06 02:04:00 -0700 | |
---|---|---|
committer | 2023-09-06 02:04:00 -0700 | |
commit | daaac7792cc348030d64a33087f1a41b3a3822cf (patch) | |
tree | 6a1e2415a50b9bf6cf5516b6ee4fa1121ae8fba4 | |
parent | 7c82dc86baf3b01600b66d77737b2766ece83b03 (diff) | |
download | bun-daaac7792cc348030d64a33087f1a41b3a3822cf.tar.gz bun-daaac7792cc348030d64a33087f1a41b3a3822cf.tar.zst bun-daaac7792cc348030d64a33087f1a41b3a3822cf.zip |
allocate task for `ThreadSafeFunction` (#4513)
* create thread safe function task
* Update napi.zig
* Update napi.zig
-rw-r--r-- | src/bun.js/event_loop.zig | 4 | ||||
-rw-r--r-- | src/bun.js/node/node_fs.zig | 12 | ||||
-rw-r--r-- | src/napi/napi.zig | 6 |
3 files changed, 18 insertions, 4 deletions
diff --git a/src/bun.js/event_loop.zig b/src/bun.js/event_loop.zig index f1367c239..73f8c368e 100644 --- a/src/bun.js/event_loop.zig +++ b/src/bun.js/event_loop.zig @@ -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)); } diff --git a/src/bun.js/node/node_fs.zig b/src/bun.js/node/node_fs.zig index 4f9e2bf68..33b3589b3 100644 --- a/src/bun.js/node/node_fs.zig +++ b/src/bun.js/node/node_fs.zig @@ -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)); } diff --git a/src/napi/napi.zig b/src/napi/napi.zig index 1d3e3e811..d143fe1b3 100644 --- a/src/napi/napi.zig +++ b/src/napi/napi.zig @@ -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; } } |