summaryrefslogtreecommitdiff
path: root/src/detached/server.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/detached/server.zig')
-rw-r--r--src/detached/server.zig18
1 files changed, 6 insertions, 12 deletions
diff --git a/src/detached/server.zig b/src/detached/server.zig
index 7d286177..2c4df87b 100644
--- a/src/detached/server.zig
+++ b/src/detached/server.zig
@@ -141,7 +141,6 @@
const std = @import("std");
const builtin = @import("builtin");
const libc = std.c;
-const linux = std.os.linux;
const posix = std.posix;
const pardes = @import("../pardes.zig");
const host_api = @import("../host.zig");
@@ -1221,17 +1220,13 @@ pub const Session = struct {
/// then keeps its own record of what was asked and simply never gets a
/// reload, which is what a host with no watcher has always done.
///
- /// NONBLOCK because this descriptor is drained from `poll`, not from a
- /// thread parked in `read` (tty.zig `watchFiles`): `drainInotify` must be
- /// able to stop.
+ /// `polled` is true because this descriptor is drained from `poll`, not
+ /// from a thread parked in a wait (tty.zig `watchFiles`): `drainInotify`
+ /// must be able to stop. On linux that is IN_NONBLOCK; on macos a kqueue
+ /// needs nothing, since the timeout argument to `kevent(2)` decides.
fn inotify(s: *Session) c_int {
if (s.inotify_fd >= 0) return s.inotify_fd;
- // The whole body is inside the comptime branch so that neither
- // `inotify_init1` nor `linux.IN` is even analysed on a platform that has
- // no inotify — the same shape file_watch.zig's `watchPath` uses.
- if (comptime builtin.os.tag == .linux) {
- s.inotify_fd = libc.inotify_init1(linux.IN.CLOEXEC | linux.IN.NONBLOCK);
- }
+ s.inotify_fd = file_watch.init(true);
return s.inotify_fd;
}
@@ -1252,8 +1247,7 @@ pub const Session = struct {
/// frontend got a frame per round it could not use. The fd is IN_NONBLOCK
/// (`inotify`), so the loop ends on EAGAIN.
fn drainInotify(s: *Session) void {
- var buf: [4096]u8 = undefined;
- while (libc.read(s.inotify_fd, &buf, buf.len) > 0) s.check_files = true;
+ if (file_watch.drain(s.inotify_fd)) s.check_files = true;
}
/// Reconcile every marked pane and the theme file. Called at the END of