diff options
| author | Loris Cro <kappaloris@gmail.com> | 2020-05-07 01:55:19 +0200 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-05-07 13:41:17 -0400 |
| commit | 7e8b859095a00cca8d102f0738a43e86fb4fb5f2 (patch) | |
| tree | 32a45edfb59014e4d3d4ee42df91f955fd4438ce /lib/std/event | |
| parent | a78ac96134a28d9e8208728bc8affb99122ff4fa (diff) | |
| download | zig-7e8b859095a00cca8d102f0738a43e86fb4fb5f2.tar.gz zig-7e8b859095a00cca8d102f0738a43e86fb4fb5f2.zip | |
fix oneshot flag erroneusly set as filter_flag
Diffstat (limited to 'lib/std/event')
| -rw-r--r-- | lib/std/event/loop.zig | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/lib/std/event/loop.zig b/lib/std/event/loop.zig index cbaa156d0e..607e2f24ca 100644 --- a/lib/std/event/loop.zig +++ b/lib/std/event/loop.zig @@ -503,7 +503,7 @@ pub const Loop = struct { } } - pub fn bsdWaitKev(self: *Loop, ident: usize, filter: i16, fflags: u32) callconv(.Async) void { + pub fn bsdWaitKev(self: *Loop, ident: usize, filter: i16, flags: u16) void { var resume_node = ResumeNode.Basic{ .base = ResumeNode{ .id = ResumeNode.Id.Basic, @@ -512,21 +512,28 @@ pub const Loop = struct { }, .kev = undefined, }; - defer self.bsdRemoveKev(ident, filter); + + defer { + // If the kevent was set to be ONESHOT, it doesn't need to be deleted manually. + if (flags & os.EV_ONESHOT != 0) { + self.bsdRemoveKev(ident, filter); + } + } + suspend { - self.bsdAddKev(&resume_node, ident, filter, fflags) catch unreachable; + self.bsdAddKev(&resume_node, ident, filter, flags) catch unreachable; } } /// resume_node must live longer than the anyframe that it holds a reference to. - pub fn bsdAddKev(self: *Loop, resume_node: *ResumeNode.Basic, ident: usize, filter: i16, fflags: u32) !void { + pub fn bsdAddKev(self: *Loop, resume_node: *ResumeNode.Basic, ident: usize, filter: i16, flags: u16) !void { self.beginOneEvent(); errdefer self.finishOneEvent(); var kev = [1]os.Kevent{os.Kevent{ .ident = ident, .filter = filter, - .flags = os.EV_ADD | os.EV_ENABLE | os.EV_CLEAR, - .fflags = fflags, + .flags = os.EV_ADD | os.EV_ENABLE | os.EV_CLEAR | flags, + .fflags = 0, .data = 0, .udata = @ptrToInt(&resume_node.base), }}; |
