| ... | @@ -136,10 +136,7 @@ pub const Loop = struct { | ... | @@ -136,10 +136,7 @@ pub const Loop = struct { |
| 136 | }; | 136 | }; |
| 137 | | 137 | |
| 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 | }; |
| 151 | | 153 | |
| 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 events | 280 | // 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 events | 297 | // 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 | }; |
| 553 | | 557 | |
| 554 | /// many producer, many consumer, thread-safe, lock-free, runtime configurable buffer size | 558 | /// many producer, many consumer, thread-safe, lock-free, runtime configurable buffer size |