authorgravatar for halildrk@gmail.comHalil <halildrk@gmail.com> 2022-11-13 18:43:29+03:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2022-11-13 17:43:29+02:00
logb2ffe113d3fd2835b25ddf2de1cc8dd49f5de722
tree1d9b1b78887bdff6dd5342807c4ee20f504a2a75
parent81dadbcd77073bd467fae08bdb15332f9bf25320
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

x/os/Reactor: implement remove function (#13330)

* x/os/Reactor: implement remove function * x/os/Reactor: update tests

1 files changed, 18 insertions(+), 0 deletions(-)

lib/std/x/os/io.zig+18
...@@ -95,6 +95,21 @@ pub const Reactor = struct {...@@ -95,6 +95,21 @@ pub const Reactor = struct {
95 };95 };
96 }96 }
9797
98 pub fn remove(self: Reactor, fd: os.fd_t) !void {
99 // directly from man epoll_ctl BUGS section
100 // In kernel versions before 2.6.9, the EPOLL_CTL_DEL operation re‐
101 // quired a non-null pointer in event, even though this argument is
102 // ignored. Since Linux 2.6.9, event can be specified as NULL when
103 // using EPOLL_CTL_DEL. Applications that need to be portable to
104 // kernels before 2.6.9 should specify a non-null pointer in event.
105 var event = linux.epoll_event{
106 .events = 0,
107 .data = .{ .ptr = 0 },
108 };
109
110 return os.epoll_ctl(self.fd, linux.EPOLL.CTL_DEL, fd, &event);
111 }
112
98 pub fn poll(self: Reactor, comptime max_num_events: comptime_int, closure: anytype, timeout_milliseconds: ?u64) !void {113 pub fn poll(self: Reactor, comptime max_num_events: comptime_int, closure: anytype, timeout_milliseconds: ?u64) !void {
99 var events: [max_num_events]linux.epoll_event = undefined;114 var events: [max_num_events]linux.epoll_event = undefined;
100115
...@@ -203,4 +218,7 @@ test "reactor/linux: drive async tcp client/listener pair" {...@@ -203,4 +218,7 @@ test "reactor/linux: drive async tcp client/listener pair" {
203 }, event);218 }, event);
204 }219 }
205 }, null);220 }, null);
221
222 try reactor.remove(client.socket.fd);
223 try reactor.remove(listener.socket.fd);
206}224}