authorgravatar for kappaloris@gmail.comLoris Cro <kappaloris@gmail.com> 2020-05-07 01:55:19+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-05-07 13:41:17-04:00
log7e8b859095a00cca8d102f0738a43e86fb4fb5f2
tree32a45edfb59014e4d3d4ee42df91f955fd4438ce
parenta78ac96134a28d9e8208728bc8affb99122ff4fa

fix oneshot flag erroneusly set as filter_flag


1 files changed, 13 insertions(+), 6 deletions(-)

lib/std/event/loop.zig+13-6
...@@ -503,7 +503,7 @@ pub const Loop = struct {...@@ -503,7 +503,7 @@ pub const Loop = struct {
503 }503 }
504 }504 }
505505
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 var resume_node = ResumeNode.Basic{507 var resume_node = ResumeNode.Basic{
508 .base = ResumeNode{508 .base = ResumeNode{
509 .id = ResumeNode.Id.Basic,509 .id = ResumeNode.Id.Basic,
...@@ -512,21 +512,28 @@ pub const Loop = struct {...@@ -512,21 +512,28 @@ pub const Loop = struct {
512 },512 },
513 .kev = undefined,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 suspend {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 }
520527
521 /// resume_node must live longer than the anyframe that it holds a reference to.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 self.beginOneEvent();530 self.beginOneEvent();
524 errdefer self.finishOneEvent();531 errdefer self.finishOneEvent();
525 var kev = [1]os.Kevent{os.Kevent{532 var kev = [1]os.Kevent{os.Kevent{
526 .ident = ident,533 .ident = ident,
527 .filter = filter,534 .filter = filter,
528 .flags = os.EV_ADD | os.EV_ENABLE | os.EV_CLEAR,535 .flags = os.EV_ADD | os.EV_ENABLE | os.EV_CLEAR | flags,
529 .fflags = fflags,536 .fflags = 0,
530 .data = 0,537 .data = 0,
531 .udata = @ptrToInt(&resume_node.base),538 .udata = @ptrToInt(&resume_node.base),
532 }};539 }};