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