mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
allocate task for ThreadSafeFunction (#4513)
* create thread safe function task * Update napi.zig * Update napi.zig
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user