diff options
Diffstat (limited to 'src/bun.js')
-rw-r--r-- | src/bun.js/api/bun/socket.zig | 4 | ||||
-rw-r--r-- | src/bun.js/base.zig | 42 | ||||
-rw-r--r-- | src/bun.js/event_loop.zig | 22 | ||||
-rw-r--r-- | src/bun.js/test/jest.zig | 2 |
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) { |