authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-07-09 01:22:36-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-07-09 01:22:36-04:00
log3ba451778fde48a5463180deea6d6539f91e1303
treeb4f30687563bf8c3d8661fd7ffad46ee4ecf02fb
parent04d3da4bd1d5b8922d3f161c92c6185f33961523

fix regressions on linux


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

std/event.zig+17-13
......@@ -136,10 +136,7 @@ pub const Loop = struct {
136136 };
137137
138138 pub const EventFd = switch (builtin.os) {
139 builtin.Os.macosx => struct {
140 base: ResumeNode,
141 kevent: posix.Kevent,
142 },
139 builtin.Os.macosx => MacOsEventFd,
143140 builtin.Os.linux => struct {
144141 base: ResumeNode,
145142 epoll_op: u32,
......@@ -147,6 +144,11 @@ pub const Loop = struct {
147144 },
148145 else => @compileError("unsupported OS"),
149146 };
147
148 const MacOsEventFd = struct {
149 base: ResumeNode,
150 kevent: posix.Kevent,
151 };
150152 };
151153
152154 /// After initialization, call run().
......@@ -276,10 +278,10 @@ pub const Loop = struct {
276278 .handle = undefined,
277279 },
278280 // this one is for sending events
279 .kevent = posix.Kevent {
281 .kevent = posix.Kevent{
280282 .ident = i,
281283 .filter = posix.EVFILT_USER,
282 .flags = posix.EV_CLEAR|posix.EV_ADD|posix.EV_DISABLE,
284 .flags = posix.EV_CLEAR | posix.EV_ADD | posix.EV_DISABLE,
283285 .fflags = 0,
284286 .data = 0,
285287 .udata = @ptrToInt(&eventfd_node.data.base),
......@@ -290,10 +292,10 @@ pub const Loop = struct {
290292 self.available_eventfd_resume_nodes.push(eventfd_node);
291293 const kevent_array = (*[1]posix.Kevent)(&eventfd_node.data.kevent);
292294 _ = try std.os.bsdKEvent(self.os_data.kqfd, kevent_array, eventlist, null);
293 eventfd_node.data.kevent.flags = posix.EV_CLEAR|posix.EV_ENABLE;
295 eventfd_node.data.kevent.flags = posix.EV_CLEAR | posix.EV_ENABLE;
294296 eventfd_node.data.kevent.fflags = posix.NOTE_TRIGGER;
295297 // this one is for waiting for events
296 self.os_data.kevents[i] = posix.Kevent {
298 self.os_data.kevents[i] = posix.Kevent{
297299 .ident = i,
298300 .filter = posix.EVFILT_USER,
299301 .flags = 0,
......@@ -542,13 +544,15 @@ pub const Loop = struct {
542544 final_eventfd: i32,
543545 final_eventfd_event: std.os.linux.epoll_event,
544546 },
545 builtin.Os.macosx => struct {
546 kqfd: i32,
547 final_kevent: posix.Kevent,
548 kevents: []posix.Kevent,
549 },
547 builtin.Os.macosx => MacOsData,
550548 else => struct {},
551549 };
550
551 const MacOsData = struct {
552 kqfd: i32,
553 final_kevent: posix.Kevent,
554 kevents: posix.Kevent,
555 };
552556};
553557
554558/// many producer, many consumer, thread-safe, lock-free, runtime configurable buffer size