fix regressions on linux

This commit is contained in:
Andrew Kelley 2018-07-09 01:22:36 -04:00
parent 04d3da4bd1
commit 3ba451778f

View File

@ -136,10 +136,7 @@ pub const Loop = struct {
};
pub const EventFd = switch (builtin.os) {
builtin.Os.macosx => struct {
base: ResumeNode,
kevent: posix.Kevent,
},
builtin.Os.macosx => MacOsEventFd,
builtin.Os.linux => struct {
base: ResumeNode,
epoll_op: u32,
@ -147,6 +144,11 @@ pub const Loop = struct {
},
else => @compileError("unsupported OS"),
};
const MacOsEventFd = struct {
base: ResumeNode,
kevent: posix.Kevent,
};
};
/// After initialization, call run().
@ -276,10 +278,10 @@ pub const Loop = struct {
.handle = undefined,
},
// this one is for sending events
.kevent = posix.Kevent {
.kevent = posix.Kevent{
.ident = i,
.filter = posix.EVFILT_USER,
.flags = posix.EV_CLEAR|posix.EV_ADD|posix.EV_DISABLE,
.flags = posix.EV_CLEAR | posix.EV_ADD | posix.EV_DISABLE,
.fflags = 0,
.data = 0,
.udata = @ptrToInt(&eventfd_node.data.base),
@ -290,10 +292,10 @@ pub const Loop = struct {
self.available_eventfd_resume_nodes.push(eventfd_node);
const kevent_array = (*[1]posix.Kevent)(&eventfd_node.data.kevent);
_ = try std.os.bsdKEvent(self.os_data.kqfd, kevent_array, eventlist, null);
eventfd_node.data.kevent.flags = posix.EV_CLEAR|posix.EV_ENABLE;
eventfd_node.data.kevent.flags = posix.EV_CLEAR | posix.EV_ENABLE;
eventfd_node.data.kevent.fflags = posix.NOTE_TRIGGER;
// this one is for waiting for events
self.os_data.kevents[i] = posix.Kevent {
self.os_data.kevents[i] = posix.Kevent{
.ident = i,
.filter = posix.EVFILT_USER,
.flags = 0,
@ -542,13 +544,15 @@ pub const Loop = struct {
final_eventfd: i32,
final_eventfd_event: std.os.linux.epoll_event,
},
builtin.Os.macosx => struct {
kqfd: i32,
final_kevent: posix.Kevent,
kevents: []posix.Kevent,
},
builtin.Os.macosx => MacOsData,
else => struct {},
};
const MacOsData = struct {
kqfd: i32,
final_kevent: posix.Kevent,
kevents: posix.Kevent,
};
};
/// many producer, many consumer, thread-safe, lock-free, runtime configurable buffer size