aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js')
-rw-r--r--src/bun.js/api/bun/socket.zig4
-rw-r--r--src/bun.js/base.zig42
-rw-r--r--src/bun.js/event_loop.zig22
-rw-r--r--src/bun.js/test/jest.zig2
4 files changed, 61 insertions, 9 deletions
diff --git a/src/bun.js/api/bun/socket.zig b/src/bun.js/api/bun/socket.zig
index 4cdcbdac8..2ad44ffb0 100644
--- a/src/bun.js/api/bun/socket.zig
+++ b/src/bun.js/api/bun/socket.zig
@@ -582,7 +582,7 @@ pub const Listener = struct {
var socket_context = uws.us_create_bun_socket_context(
@intFromBool(ssl_enabled),
- uws.Loop.get().?,
+ uws.Loop.get(),
@sizeOf(usize),
ctx_opts,
) orelse {
@@ -919,7 +919,7 @@ pub const Listener = struct {
globalObject.bunVM().eventLoop().ensureWaker();
- var socket_context = uws.us_create_bun_socket_context(@intFromBool(ssl_enabled), uws.Loop.get().?, @sizeOf(usize), ctx_opts).?;
+ var socket_context = uws.us_create_bun_socket_context(@intFromBool(ssl_enabled), uws.Loop.get(), @sizeOf(usize), ctx_opts).?;
var connection: Listener.UnixOrHost = if (port) |port_| .{
.host = .{ .host = (hostname_or_unix.cloneIfNeeded(bun.default_allocator) catch unreachable).slice(), .port = port_ },
} else .{
diff --git a/src/bun.js/base.zig b/src/bun.js/base.zig
index a6df36c4f..d050804e3 100644
--- a/src/bun.js/base.zig
+++ b/src/bun.js/base.zig
@@ -23,6 +23,7 @@ const uws = @import("root").bun.uws;
const Body = WebCore.Body;
const TaggedPointerTypes = @import("../tagged_pointer.zig");
const TaggedPointerUnion = TaggedPointerTypes.TaggedPointerUnion;
+const PackageManager = @import("../install/install.zig").PackageManager;
pub const ExceptionValueRef = [*c]js.JSValueRef;
pub const JSValueRef = js.JSValueRef;
@@ -1720,6 +1721,10 @@ pub const FilePoll = struct {
pub var owner: Owner = Owner.init(@as(*Deactivated, @ptrFromInt(@as(usize, 0xDEADBEEF))));
};
+ const RunCommand = @import("../../src/cli/run_command.zig").RunCommand;
+ const PostinstallSubprocess = RunCommand.PostinstallSubprocess;
+ const PostinstallSubprocessPid = RunCommand.PostinstallSubprocess.PidPollData;
+
pub const Owner = bun.TaggedPointerUnion(.{
FileReader,
FileSink,
@@ -1729,6 +1734,8 @@ pub const FilePoll = struct {
Deactivated,
DNSResolver,
GetAddrInfoRequest,
+ PostinstallSubprocess,
+ PostinstallSubprocessPid,
});
fn updateFlags(poll: *FilePoll, updated: Flags.Set) void {
@@ -1827,7 +1834,6 @@ pub const FilePoll = struct {
@field(Owner.Tag, "Subprocess") => {
log("onUpdate " ++ kqueue_or_epoll ++ " (fd: {d}) Subprocess", .{poll.fd});
var loader = ptr.as(JSC.Subprocess);
-
loader.onExitNotification();
},
@field(Owner.Tag, "FileSink") => {
@@ -1835,18 +1841,26 @@ pub const FilePoll = struct {
var loader = ptr.as(JSC.WebCore.FileSink);
loader.onPoll(size_or_offset, 0);
},
-
@field(Owner.Tag, "DNSResolver") => {
log("onUpdate " ++ kqueue_or_epoll ++ " (fd: {d}) DNSResolver", .{poll.fd});
var loader: *DNSResolver = ptr.as(DNSResolver);
loader.onDNSPoll(poll);
},
-
@field(Owner.Tag, "GetAddrInfoRequest") => {
log("onUpdate " ++ kqueue_or_epoll ++ " (fd: {d}) GetAddrInfoRequest", .{poll.fd});
var loader: *GetAddrInfoRequest = ptr.as(GetAddrInfoRequest);
loader.onMachportChange();
},
+ @field(Owner.Tag, "PostinstallSubprocess") => {
+ log("onUpdate " ++ kqueue_or_epoll ++ " (fd: {d}) PostinstallSubprocess Output", .{poll.fd});
+ var loader: *PostinstallSubprocess = ptr.as(PostinstallSubprocess);
+ loader.onOutputUpdate(size_or_offset, poll.fileDescriptor());
+ },
+ @field(Owner.Tag, "PidPollData") => {
+ log("onUpdate " ++ kqueue_or_epoll ++ " (fd: {d}) PostinstallSubprocess Pid", .{poll.fd});
+ var loader: *PostinstallSubprocess = ptr.as(PostinstallSubprocess);
+ loader.onProcessUpdate(size_or_offset);
+ },
else => {
log("onUpdate " ++ kqueue_or_epoll ++ " (fd: {d}) disconnected?", .{poll.fd});
@@ -1854,6 +1868,10 @@ pub const FilePoll = struct {
}
}
+ pub inline fn fileDescriptor(this: *FilePoll) bun.FileDescriptor {
+ return @intCast(this.fd);
+ }
+
pub const Flags = enum {
// What are we asking the event loop about?
@@ -2082,6 +2100,24 @@ pub const FilePoll = struct {
return poll;
}
+ pub fn initWithPackageManager(m: *PackageManager, fd: bun.FileDescriptor, flags: Flags.Struct, owner: anytype) *FilePoll {
+ return initWithPackageManagerWithOwner(m, fd, flags, Owner.init(owner));
+ }
+
+ pub fn initWithPackageManagerWithOwner(manager: *PackageManager, fd: bun.FileDescriptor, flags: Flags.Struct, owner: Owner) *FilePoll {
+ var poll = manager.file_poll_store.get();
+ poll.fd = @intCast(fd);
+ poll.flags = Flags.Set.init(flags);
+ poll.owner = owner;
+ poll.next_to_free = null;
+
+ if (KQueueGenerationNumber != u0) {
+ max_generation_number +%= 1;
+ poll.generation_number = max_generation_number;
+ }
+ return poll;
+ }
+
pub inline fn canRef(this: *const FilePoll) bool {
if (this.flags.contains(.disable))
return false;
diff --git a/src/bun.js/event_loop.zig b/src/bun.js/event_loop.zig
index c7de557f4..81496ab0a 100644
--- a/src/bun.js/event_loop.zig
+++ b/src/bun.js/event_loop.zig
@@ -913,8 +913,7 @@ pub const EventLoop = struct {
pub fn ensureWaker(this: *EventLoop) void {
JSC.markBinding(@src());
if (this.virtual_machine.event_loop_handle == null) {
- var actual = uws.Loop.get().?;
- this.virtual_machine.event_loop_handle = actual;
+ this.virtual_machine.event_loop_handle = uws.Loop.get();
this.virtual_machine.gc_controller.init(this.virtual_machine);
// _ = actual.addPostHandler(*JSC.EventLoop, this, JSC.EventLoop.afterUSocketsTick);
// _ = actual.addPreHandler(*JSC.VM, this.virtual_machine.global.vm(), JSC.VM.drainMicrotasks);
@@ -955,7 +954,7 @@ pub const MiniEventLoop = struct {
return .{
.tasks = Queue.init(allocator),
.allocator = allocator,
- .loop = uws.Loop.get().?,
+ .loop = uws.Loop.get(),
};
}
@@ -1006,6 +1005,12 @@ pub const MiniEventLoop = struct {
}
}
+ pub fn drainTasks(this: *MiniEventLoop, context: *anyopaque) void {
+ while (this.tasks.readItem()) |task| {
+ task.run(context);
+ }
+ }
+
pub fn enqueueTask(
this: *MiniEventLoop,
comptime Context: type,
@@ -1094,4 +1099,15 @@ pub const AnyEventLoop = union(enum) {
},
}
}
+
+ pub fn drainTasks(this: *AnyEventLoop, context: *anyopaque) void {
+ switch (this.*) {
+ .jsc => {
+ unreachable;
+ },
+ .mini => {
+ this.mini.drainTasks(context);
+ },
+ }
+ }
};
diff --git a/src/bun.js/test/jest.zig b/src/bun.js/test/jest.zig
index 3617d5961..f3c9ffa26 100644
--- a/src/bun.js/test/jest.zig
+++ b/src/bun.js/test/jest.zig
@@ -127,7 +127,7 @@ pub const TestRunner = struct {
if (milliseconds > 0) {
if (this.test_timeout_timer == null) {
- this.test_timeout_timer = bun.uws.Timer.createFallthrough(bun.uws.Loop.get().?, this);
+ this.test_timeout_timer = bun.uws.Timer.createFallthrough(bun.uws.Loop.get(), this);
}
if (this.last_test_timeout_timer_duration != milliseconds) {