kevent properly blocks

kevent returns immediately if (1) event list is empty or (2) changelist
is NOT empty. This forces CPU on mac to be very high because this
becomes a hot loop.
This commit is contained in:
Mitchell Hashimoto
2022-04-24 10:21:29 -07:00
parent 724b2aedfa
commit 9d77e9e335

View File

@ -108,8 +108,16 @@ fn threadMain(self: *Embed) void {
.tv_nsec = @mod(timeout, 1000) * 1000000, .tv_nsec = @mod(timeout, 1000) * 1000000,
}; };
var ev: [0]std.os.Kevent = undefined; // Important: for kevent to block properly, it needs an
_ = std.os.kevent(fd, &ev, &ev, &ts) catch |err| blk: { // EMPTY changeset and a NON-EMPTY event set.
var changes: [0]std.os.Kevent = undefined;
var events: [1]std.os.Kevent = undefined;
_ = std.os.kevent(
fd,
&changes,
&events,
if (timeout < 0) null else &ts,
) catch |err| blk: {
log.err("kevent error: {}", .{err}); log.err("kevent error: {}", .{err});
break :blk 0; break :blk 0;
}; };