| ... | ... | @@ -503,7 +503,7 @@ pub const Loop = struct { |
| 503 | 503 | } |
| 504 | 504 | } |
| 505 | 505 | |
| 506 | | pub fn bsdWaitKev(self: *Loop, ident: usize, filter: i16, fflags: u32) callconv(.Async) void { |
| 506 | pub fn bsdWaitKev(self: *Loop, ident: usize, filter: i16, flags: u16) void { |
| 507 | 507 | var resume_node = ResumeNode.Basic{ |
| 508 | 508 | .base = ResumeNode{ |
| 509 | 509 | .id = ResumeNode.Id.Basic, |
| ... | ... | @@ -512,21 +512,28 @@ pub const Loop = struct { |
| 512 | 512 | }, |
| 513 | 513 | .kev = undefined, |
| 514 | 514 | }; |
| 515 | | defer self.bsdRemoveKev(ident, filter); |
| 515 | |
| 516 | defer { |
| 517 | // If the kevent was set to be ONESHOT, it doesn't need to be deleted manually. |
| 518 | if (flags & os.EV_ONESHOT != 0) { |
| 519 | self.bsdRemoveKev(ident, filter); |
| 520 | } |
| 521 | } |
| 522 | |
| 516 | 523 | suspend { |
| 517 | | self.bsdAddKev(&resume_node, ident, filter, fflags) catch unreachable; |
| 524 | self.bsdAddKev(&resume_node, ident, filter, flags) catch unreachable; |
| 518 | 525 | } |
| 519 | 526 | } |
| 520 | 527 | |
| 521 | 528 | /// resume_node must live longer than the anyframe that it holds a reference to. |
| 522 | | pub fn bsdAddKev(self: *Loop, resume_node: *ResumeNode.Basic, ident: usize, filter: i16, fflags: u32) !void { |
| 529 | pub fn bsdAddKev(self: *Loop, resume_node: *ResumeNode.Basic, ident: usize, filter: i16, flags: u16) !void { |
| 523 | 530 | self.beginOneEvent(); |
| 524 | 531 | errdefer self.finishOneEvent(); |
| 525 | 532 | var kev = [1]os.Kevent{os.Kevent{ |
| 526 | 533 | .ident = ident, |
| 527 | 534 | .filter = filter, |
| 528 | | .flags = os.EV_ADD | os.EV_ENABLE | os.EV_CLEAR, |
| 529 | | .fflags = fflags, |
| 535 | .flags = os.EV_ADD | os.EV_ENABLE | os.EV_CLEAR | flags, |
| 536 | .fflags = 0, |
| 530 | 537 | .data = 0, |
| 531 | 538 | .udata = @ptrToInt(&resume_node.base), |
| 532 | 539 | }}; |
| ... | ... | @@ -616,14 +623,16 @@ pub const Loop = struct { |
| 616 | 623 | |
| 617 | 624 | self.workerRun(); |
| 618 | 625 | |
| 619 | | switch (builtin.os.tag) { |
| 620 | | .linux, |
| 621 | | .macosx, |
| 622 | | .freebsd, |
| 623 | | .netbsd, |
| 624 | | .dragonfly, |
| 625 | | => self.fs_thread.wait(), |
| 626 | | else => {}, |
| 626 | if (!builtin.single_threaded) { |
| 627 | switch (builtin.os.tag) { |
| 628 | .linux, |
| 629 | .macosx, |
| 630 | .freebsd, |
| 631 | .netbsd, |
| 632 | .dragonfly, |
| 633 | => self.fs_thread.wait(), |
| 634 | else => {}, |
| 635 | } |
| 627 | 636 | } |
| 628 | 637 | |
| 629 | 638 | for (self.extra_threads) |extra_thread| { |