diff options
Diffstat (limited to 'src/bun.js/base.zig')
-rw-r--r-- | src/bun.js/base.zig | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/src/bun.js/base.zig b/src/bun.js/base.zig index 6fcfb8a36..70e5351cc 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; @@ -1719,6 +1720,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, @@ -1728,6 +1733,8 @@ pub const FilePoll = struct { Deactivated, DNSResolver, GetAddrInfoRequest, + PostinstallSubprocess, + PostinstallSubprocessPid, }); fn updateFlags(poll: *FilePoll, updated: Flags.Set) void { @@ -1833,7 +1840,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") => { @@ -1841,18 +1847,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}); @@ -1860,6 +1874,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? @@ -2088,6 +2106,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; |