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 {...@@ -136,10 +136,7 @@ pub const Loop = struct {
136 };136 };
137137
138 pub const EventFd = switch (builtin.os) {138 pub const EventFd = switch (builtin.os) {
139 builtin.Os.macosx => struct {139 builtin.Os.macosx => MacOsEventFd,
140 base: ResumeNode,
141 kevent: posix.Kevent,
142 },
143 builtin.Os.linux => struct {140 builtin.Os.linux => struct {
144 base: ResumeNode,141 base: ResumeNode,
145 epoll_op: u32,142 epoll_op: u32,
...@@ -147,6 +144,11 @@ pub const Loop = struct {...@@ -147,6 +144,11 @@ pub const Loop = struct {
147 },144 },
148 else => @compileError("unsupported OS"),145 else => @compileError("unsupported OS"),
149 };146 };
147
148 const MacOsEventFd = struct {
149 base: ResumeNode,
150 kevent: posix.Kevent,
151 };
150 };152 };
151153
152 /// After initialization, call run().154 /// After initialization, call run().
...@@ -276,10 +278,10 @@ pub const Loop = struct {...@@ -276,10 +278,10 @@ pub const Loop = struct {
276 .handle = undefined,278 .handle = undefined,
277 },279 },
278 // this one is for sending events280 // this one is for sending events
279 .kevent = posix.Kevent {281 .kevent = posix.Kevent{
280 .ident = i,282 .ident = i,
281 .filter = posix.EVFILT_USER,283 .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,
283 .fflags = 0,285 .fflags = 0,
284 .data = 0,286 .data = 0,
285 .udata = @ptrToInt(&eventfd_node.data.base),287 .udata = @ptrToInt(&eventfd_node.data.base),
...@@ -290,10 +292,10 @@ pub const Loop = struct {...@@ -290,10 +292,10 @@ pub const Loop = struct {
290 self.available_eventfd_resume_nodes.push(eventfd_node);292 self.available_eventfd_resume_nodes.push(eventfd_node);
291 const kevent_array = (*[1]posix.Kevent)(&eventfd_node.data.kevent);293 const kevent_array = (*[1]posix.Kevent)(&eventfd_node.data.kevent);
292 _ = try std.os.bsdKEvent(self.os_data.kqfd, kevent_array, eventlist, null);294 _ = 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;
294 eventfd_node.data.kevent.fflags = posix.NOTE_TRIGGER;296 eventfd_node.data.kevent.fflags = posix.NOTE_TRIGGER;
295 // this one is for waiting for events297 // this one is for waiting for events
296 self.os_data.kevents[i] = posix.Kevent {298 self.os_data.kevents[i] = posix.Kevent{
297 .ident = i,299 .ident = i,
298 .filter = posix.EVFILT_USER,300 .filter = posix.EVFILT_USER,
299 .flags = 0,301 .flags = 0,
...@@ -542,13 +544,15 @@ pub const Loop = struct {...@@ -542,13 +544,15 @@ pub const Loop = struct {
542 final_eventfd: i32,544 final_eventfd: i32,
543 final_eventfd_event: std.os.linux.epoll_event,545 final_eventfd_event: std.os.linux.epoll_event,
544 },546 },
545 builtin.Os.macosx => struct {547 builtin.Os.macosx => MacOsData,
546 kqfd: i32,
547 final_kevent: posix.Kevent,
548 kevents: []posix.Kevent,
549 },
550 else => struct {},548 else => struct {},
551 };549 };
550
551 const MacOsData = struct {
552 kqfd: i32,
553 final_kevent: posix.Kevent,
554 kevents: posix.Kevent,
555 };
552};556};
553557
554/// many producer, many consumer, thread-safe, lock-free, runtime configurable buffer size558/// many producer, many consumer, thread-safe, lock-free, runtime configurable buffer size