aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-10-05 18:00:36 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-10-05 18:07:41 -0700
commit707b454bf480dc595d319a387b36f5f1e069b716 (patch)
treead5d73680e0b0ca46fb6a5236308ef92ad607f3f /src
parentca4c99b1bfa6488b36da11456e497f2e4bcd282d (diff)
downloadbun-707b454bf480dc595d319a387b36f5f1e069b716.tar.gz
bun-707b454bf480dc595d319a387b36f5f1e069b716.tar.zst
bun-707b454bf480dc595d319a387b36f5f1e069b716.zip
Support buffered input in Bun.spawn
Diffstat (limited to 'src')
-rw-r--r--src/bun.js/event_loop.zig22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/bun.js/event_loop.zig b/src/bun.js/event_loop.zig
index 76206de54..0ce2394c7 100644
--- a/src/bun.js/event_loop.zig
+++ b/src/bun.js/event_loop.zig
@@ -324,6 +324,13 @@ pub const EventLoop = struct {
return this.tasks.count - start_count;
}
+ pub fn autoTick(this: *EventLoop) void {
+ if (this.virtual_machine.uws_event_loop.?.num_polls > 0 or this.virtual_machine.uws_event_loop.?.active > 0) {
+ this.virtual_machine.uws_event_loop.?.tick();
+ this.afterUSocketsTick();
+ }
+ }
+
// TODO: fix this technical debt
pub fn tick(this: *EventLoop) void {
var ctx = this.virtual_machine;
@@ -380,9 +387,7 @@ pub const EventLoop = struct {
this.tick();
if (promise.status(this.global.vm()) == .Pending) {
- if (this.virtual_machine.uws_event_loop.?.active > 0 or this.virtual_machine.uws_event_loop.?.num_polls > 0) {
- this.virtual_machine.uws_event_loop.?.tick();
- }
+ this.autoTick();
}
}
},
@@ -420,7 +425,6 @@ pub const EventLoop = struct {
}
pub fn afterUSocketsTick(this: *EventLoop) void {
- this.defer_count.store(0, .Monotonic);
const processes = this.pending_processes_to_exit.keys();
if (processes.len > 0) {
for (processes) |process| {
@@ -428,8 +432,6 @@ pub const EventLoop = struct {
}
this.pending_processes_to_exit.clearRetainingCapacity();
}
-
- this.tick();
}
pub fn enqueueTaskConcurrent(this: *EventLoop, task: *ConcurrentTask) void {
@@ -438,7 +440,6 @@ pub const EventLoop = struct {
this.concurrent_tasks.push(task);
if (this.virtual_machine.uws_event_loop) |loop| {
- _ = this.defer_count.fetchAdd(1, .Monotonic);
loop.wakeup();
}
}
@@ -471,6 +472,13 @@ pub const Poller = struct {
// so we have to dedupe it
_ = loader.globalThis.bunVM().eventLoop().pending_processes_to_exit.getOrPut(loader) catch unreachable;
},
+ @field(Pollable.Tag, "BufferedInput") => {
+ var loader = ptr.as(JSC.Subprocess.BufferedInput);
+
+ loader.poll_ref.deactivate(loop);
+
+ loader.onReady(@bitCast(i64, kqueue_event.data));
+ },
@field(Pollable.Tag, "FileSink") => {
var loader = ptr.as(JSC.WebCore.FileSink);
loader.poll_ref.deactivate(loop);