From: "Paul Tarjan via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Patrick Steinhardt <ps@pks.im>, Paul Tarjan <paul@paultarjan.com>,
Paul Tarjan <github@paulisageek.com>
Subject: [PATCH v9 00/12] fsmonitor: implement filesystem change listener for Linux
Date: Thu, 05 Mar 2026 00:51:48 +0000 [thread overview]
Message-ID: <pull.2147.v9.git.git.1772671920.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2147.v8.git.git.1772648125.gitgitgadget@gmail.com>
This series implements the built-in fsmonitor daemon for Linux using the
inotify API, bringing it to feature parity with the existing Windows and
macOS implementations. It also fixes two memory leaks in the
platform-independent daemon code and deduplicates the IPC and settings logic
that is now shared between macOS and Linux.
The implementation uses inotify rather than fanotify because fanotify
requires either CAP_SYS_ADMIN or CAP_PERFMON capabilities, making it
unsuitable for an unprivileged user-space daemon. While inotify has the
limitation of requiring a separate watch on every directory (unlike macOS
FSEvents, which can monitor an entire directory tree with a single watch),
it operates without elevated privileges and provides the per-file event
granularity needed for fsmonitor.
The listener uses inotify_init1(O_NONBLOCK) with a poll loop that checks for
events with a 50-millisecond timeout, keeping the inotify queue well-drained
to minimize the risk of overflows. Bidirectional hashmaps map between watch
descriptors and directory paths for efficient event resolution. Directory
renames are tracked using inotify cookie mechanism to correlate
IN_MOVED_FROM and IN_MOVED_TO event pairs; a periodic check detects stale
renames where the matching IN_MOVED_TO never arrived, forcing a resync.
New directory creation triggers recursive watch registration to ensure all
subdirectories are monitored. The IN_MASK_CREATE flag is used where
available to prevent modifying existing watches, with a fallback for older
kernels. When IN_MASK_CREATE is available and inotify_add_watch returns
EEXIST, it means another thread or recursive scan has already registered the
watch, so it is safe to ignore.
Remote filesystem detection uses statfs() to identify network-mounted
filesystems (NFS, CIFS, SMB, FUSE, etc.) via their magic numbers. Mount
point information is read from /proc/mounts and matched against the statfs
f_fsid to get accurate, human-readable filesystem type names for logging.
When the .git directory is on a remote filesystem, the IPC socket falls back
to $HOME or a user-configured directory via the fsmonitor.socketDir setting.
This series builds on work from https://github.com/git/git/pull/1352 by Eric
DeCosta and https://github.com/git/git/pull/1667 by Marziyeh Esipreh,
updated to work with the current codebase and address all review feedback.
Changes since v8:
* Replaced close_fd_above_stderr flag with generic pre_exec_cb callback in
struct child_process per Junio's review
* Provided close_fd_above_stderr() as a ready-made callback function
Changes since v7:
* Added patch 12: convert khash to strset in do_handle_client (Patrick's
#leftoverbit suggestion)
* Fixed "Forcing shutdown" trace message to start with lowercase
* Fixed redundant statfs() call in find_mount() (caller already had the
result)
* Fixed CMakeLists.txt GIT-BUILD-OPTIONS: was hardcoded to "win32" for
FSMONITOR_DAEMON_BACKEND and FSMONITOR_OS_SETTINGS, now uses the CMake
variables
* Fixed uninitialized strset on trivial response path (STRSET_INIT)
* Removed V9FS_MAGIC from get_fs_typename() to match is_remote_fs() (9p is
local VM mounts)
* Split 30-second stop timeout into its own commit per review request
* Fixed misleading indentation on shutdown assignment in handle_events()
* Updated commit messages to describe all changes (test hardening,
fsmonitor-ipc.c spawn changes)
* Updated Makefile comment for FSMONITOR_OS_SETTINGS to mention fsm-ipc
Changes since v6:
* Introduced FSMONITOR_OS_SETTINGS build variable (set to "unix" for macOS
and Linux, "win32" for Windows) to eliminate if/else conditionals in
Makefile, meson.build, and CMakeLists.txt per Junio's review
* Moved fsm-path-utils from FSMONITOR_OS_SETTINGS to
FSMONITOR_DAEMON_BACKEND since path-utils files are platform-specific
* Removed V9FS_MAGIC from remote filesystem detection (9p is used for local
VM/container host mounts where fsmonitor works fine)
* Removed redundant #include <libgen.h> (already provided by
compat/posix.h)
* Fixed cookie wait comment wording ("see" to "observe")
* Rewrote commit messages for IPC and settings dedup patches
Changes since v5:
* Split monolithic commit into 10-patch series per Patrick's review
* Deduplicated fsm-ipc and fsm-settings into shared Unix implementations
* Rewrote commit message with prose paragraphs, explain inotify vs
fanotify, removed "Issues addressed" sections, added Based-on-patch-by
trailers
* Removed redundant includes already provided by compat/posix.h
* Fixed error/trace message capitalization per coding guidelines
* Fixed stale rename check interval from 1000 seconds to 1 second
* Changed poll timeout from 1ms to 50ms to reduce idle CPU wake-ups
* Replaced infinite pthread_cond_wait cookie loop with one-second
pthread_cond_timedwait (prevents daemon hangs on overlay filesystems
where events are never delivered)
* Added pthread_cond_timedwait to Windows pthread compatibility layer
* Separated test into its own commit with smoke test that skips when
inotify events are not delivered (e.g., overlayfs with older kernels)
* Fixed test hang on Fedora CI: stop_git() looped forever when ps was
unavailable because bash in POSIX/sh mode returns exit 0 from kill with
an empty process group argument. Fixed by falling back to /proc/$pid/stat
for process group ID and guarding stop_git against empty pgid.
* Redirect spawn_daemon() stdout/stderr to /dev/null and close inherited
file descriptors to prevent the intermediate process from holding test
pipe file descriptors
* Call setsid() on daemon detach to prevent shells with job control from
waiting on the daemon process group
* Close inherited file descriptors 3-7 in the test watchdog subprocess
* Added 30-second timeout to "fsmonitor--daemon stop" to prevent indefinite
blocking
* Added helpful error message when inotify watch limit (max_user_watches)
is reached
* Initialize fd_inotify to -1 and use fd >= 0 check for correct fd 0
handling
* Use sysconf(_SC_OPEN_MAX) instead of hardcoded 1024 for fd close limit
* Check setsid() return value
Changes since v4:
* Added Meson build support
Changes since v3:
* Fix crash on rapid nested directory creation (EEXIST from
inotify_add_watch with IN_MASK_CREATE)
* Extensive stress testing
Changes since v2:
* Fix khash memory leak in do_handle_client
Changes since v1:
* Fix hashmap memory leak in fsmonitor_run_daemon()
Paul Tarjan (12):
fsmonitor: fix khash memory leak in do_handle_client
fsmonitor: fix hashmap memory leak in fsmonitor_run_daemon
compat/win32: add pthread_cond_timedwait
fsmonitor: use pthread_cond_timedwait for cookie wait
fsmonitor: rename fsm-ipc-darwin.c to fsm-ipc-unix.c
fsmonitor: rename fsm-settings-darwin.c to fsm-settings-unix.c
fsmonitor: implement filesystem change listener for Linux
run-command: add pre-exec callback for child processes
fsmonitor: close inherited file descriptors and detach in daemon
fsmonitor: add timeout to daemon stop command
fsmonitor: add tests for Linux
fsmonitor: convert shown khash to strset in do_handle_client
Documentation/config/fsmonitor--daemon.adoc | 4 +-
Documentation/git-fsmonitor--daemon.adoc | 28 +-
Makefile | 6 +-
builtin/fsmonitor--daemon.c | 92 ++-
compat/fsmonitor/fsm-health-linux.c | 33 +
.../{fsm-ipc-darwin.c => fsm-ipc-unix.c} | 0
compat/fsmonitor/fsm-listen-linux.c | 746 ++++++++++++++++++
compat/fsmonitor/fsm-path-utils-linux.c | 217 +++++
...-settings-darwin.c => fsm-settings-unix.c} | 0
compat/win32/pthread.c | 26 +
compat/win32/pthread.h | 2 +
config.mak.uname | 12 +-
contrib/buildsystems/CMakeLists.txt | 33 +-
fsmonitor-ipc.c | 3 +
meson.build | 13 +-
run-command.c | 15 +
run-command.h | 15 +
t/t7527-builtin-fsmonitor.sh | 89 ++-
18 files changed, 1271 insertions(+), 63 deletions(-)
create mode 100644 compat/fsmonitor/fsm-health-linux.c
rename compat/fsmonitor/{fsm-ipc-darwin.c => fsm-ipc-unix.c} (100%)
create mode 100644 compat/fsmonitor/fsm-listen-linux.c
create mode 100644 compat/fsmonitor/fsm-path-utils-linux.c
rename compat/fsmonitor/{fsm-settings-darwin.c => fsm-settings-unix.c} (100%)
base-commit: 3e0db84c88c57e70ac8be8c196dfa92c5d656fbc
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2147%2Fptarjan%2Fclaude%2Fupdate-pr-1352-current-85Gk8-v9
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2147/ptarjan/claude/update-pr-1352-current-85Gk8-v9
Pull-Request: https://github.com/git/git/pull/2147
Range-diff vs v8:
1: 4d4dec8fa1 = 1: 4d4dec8fa1 fsmonitor: fix khash memory leak in do_handle_client
2: cb270120f0 = 2: cb270120f0 fsmonitor: fix hashmap memory leak in fsmonitor_run_daemon
3: 44a063074d = 3: 44a063074d compat/win32: add pthread_cond_timedwait
4: b1081d1e13 = 4: b1081d1e13 fsmonitor: use pthread_cond_timedwait for cookie wait
5: dec0fb144f = 5: dec0fb144f fsmonitor: rename fsm-ipc-darwin.c to fsm-ipc-unix.c
6: b2aaadb4ae = 6: b2aaadb4ae fsmonitor: rename fsm-settings-darwin.c to fsm-settings-unix.c
7: 03cf12d01b = 7: 03cf12d01b fsmonitor: implement filesystem change listener for Linux
8: 29a6461915 ! 8: 31fa1fb324 run-command: add close_fd_above_stderr option
@@ Metadata
Author: Paul Tarjan <github@paulisageek.com>
## Commit message ##
- run-command: add close_fd_above_stderr option
+ run-command: add pre-exec callback for child processes
- Add a new option to struct child_process that closes file descriptors
- 3 and above in the child after forking but before exec. Without this,
- long-running child processes inherit pipe endpoints and other
- descriptors from the parent environment.
+ Add a pre_exec_cb function pointer to struct child_process that is
+ invoked in the child between fork and exec. This gives callers a
+ place to perform setup that must happen in the child's context,
+ such as closing inherited file descriptors.
- The upper bound for the fd scan comes from sysconf(_SC_OPEN_MAX),
- capped at 4096 to avoid excessive iteration when the limit is set
- very high.
+ Provide close_fd_above_stderr() as a ready-made callback that
+ closes file descriptors 3 and above (skipping the child-notifier
+ pipe), capped at sysconf(_SC_OPEN_MAX) or 4096, whichever is
+ smaller.
Signed-off-by: Paul Tarjan <github@paulisageek.com>
## run-command.c ##
+@@ run-command.c: static void trace_run_command(const struct child_process *cp)
+ strbuf_release(&buf);
+ }
+
++void close_fd_above_stderr(void)
++{
++ long max_fd = sysconf(_SC_OPEN_MAX);
++ int fd;
++ if (max_fd < 0 || max_fd > 4096)
++ max_fd = 4096;
++ for (fd = 3; fd < max_fd; fd++) {
++ if (fd != child_notifier)
++ close(fd);
++ }
++}
++
+ int start_command(struct child_process *cmd)
+ {
+ int need_in, need_out, need_err;
@@ run-command.c: fail_pipe:
child_close(cmd->out);
}
-+ if (cmd->close_fd_above_stderr) {
-+ long max_fd = sysconf(_SC_OPEN_MAX);
-+ int fd;
-+ if (max_fd < 0 || max_fd > 4096)
-+ max_fd = 4096;
-+ for (fd = 3; fd < max_fd; fd++) {
-+ if (fd != child_notifier)
-+ close(fd);
-+ }
-+ }
++ if (cmd->pre_exec_cb)
++ cmd->pre_exec_cb();
+
if (cmd->dir && chdir(cmd->dir))
child_die(CHILD_ERR_CHDIR);
@@ run-command.h: struct child_process {
unsigned wait_after_clean:1;
+
+ /**
-+ * Close file descriptors 3 and above in the child after forking
-+ * but before exec. This prevents the long-running child from
-+ * inheriting pipe endpoints or other descriptors from the parent
-+ * environment (e.g., the test harness).
++ * If set, the callback is invoked in the child between fork and
++ * exec. It can be used, for example, to close inherited file
++ * descriptors that the child should not keep open.
+ */
-+ unsigned close_fd_above_stderr:1;
++ void (*pre_exec_cb)(void);
+
void (*clean_on_exit_handler)(struct child_process *process);
};
+@@ run-command.h: struct child_process {
+ .env = STRVEC_INIT, \
+ }
+
++/**
++ * Close file descriptors 3 and above. Suitable for use as a
++ * pre_exec_cb to prevent the child from inheriting pipe endpoints
++ * or other descriptors from the parent environment.
++ */
++void close_fd_above_stderr(void);
++
+ /**
+ * The functions: start_command, finish_command, run_command do the following:
+ *
9: b596c5004d ! 9: c963074cbd fsmonitor: close inherited file descriptors and detach in daemon
@@ builtin/fsmonitor--daemon.c: static int try_to_start_background_daemon(void)
cp.no_stdin = 1;
cp.no_stdout = 1;
cp.no_stderr = 1;
-+ cp.close_fd_above_stderr = 1;
++ cp.pre_exec_cb = close_fd_above_stderr;
sbgr = start_bg_command(&cp, bg_wait_cb, NULL,
fsmonitor__start_timeout_sec);
@@ fsmonitor-ipc.c: static int spawn_daemon(void)
cmd.no_stdin = 1;
+ cmd.no_stdout = 1;
+ cmd.no_stderr = 1;
-+ cmd.close_fd_above_stderr = 1;
++ cmd.pre_exec_cb = close_fd_above_stderr;
cmd.trace2_child_class = "fsmonitor";
strvec_pushl(&cmd.args, "fsmonitor--daemon", "start", NULL);
10: 72125ac20f = 10: ee3ee75c94 fsmonitor: add timeout to daemon stop command
11: 76b171ab5c = 11: 54bd8f604a fsmonitor: add tests for Linux
12: 6c36c9e11e = 12: e603fc7dde fsmonitor: convert shown khash to strset in do_handle_client
--
gitgitgadget
next prev parent reply other threads:[~2026-03-05 0:52 UTC|newest]
Thread overview: 129+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-30 8:14 [PATCH] fsmonitor: implement filesystem change listener for Linux Paul Tarjan via GitGitGadget
2025-12-30 11:38 ` Junio C Hamano
2025-12-30 12:08 ` [PATCH v2] " Paul Tarjan via GitGitGadget
2025-12-30 12:55 ` [PATCH v3] " Paul Tarjan via GitGitGadget
2025-12-31 17:41 ` [PATCH v4] " Paul Tarjan via GitGitGadget
2026-01-05 12:07 ` Patrick Steinhardt
2026-02-20 22:18 ` Junio C Hamano
2026-02-21 16:15 ` Paul Tarjan
2026-02-21 17:07 ` Junio C Hamano
2026-02-23 6:34 ` Patrick Steinhardt
2026-02-23 15:42 ` Junio C Hamano
2026-02-23 15:46 ` Patrick Steinhardt
2026-02-24 1:34 ` Paul Tarjan
2026-02-24 8:03 ` Patrick Steinhardt
2026-02-24 1:31 ` [PATCH v5] " Paul Tarjan via GitGitGadget
2026-02-24 8:03 ` Patrick Steinhardt
2026-02-25 20:17 ` [PATCH v6 00/10] " Paul Tarjan via GitGitGadget
2026-02-25 20:17 ` [PATCH v6 01/10] fsmonitor: fix khash memory leak in do_handle_client Paul Tarjan via GitGitGadget
2026-02-25 21:01 ` Junio C Hamano
2026-02-25 20:17 ` [PATCH v6 02/10] fsmonitor: fix hashmap memory leak in fsmonitor_run_daemon Paul Tarjan via GitGitGadget
2026-02-25 20:17 ` [PATCH v6 03/10] compat/win32: add pthread_cond_timedwait Paul Tarjan via GitGitGadget
2026-02-25 20:17 ` [PATCH v6 04/10] fsmonitor: use pthread_cond_timedwait for cookie wait Paul Tarjan via GitGitGadget
2026-02-25 21:13 ` Junio C Hamano
2026-02-27 6:31 ` Paul Tarjan
2026-02-27 16:44 ` Junio C Hamano
2026-02-28 0:28 ` Paul Tarjan
2026-02-25 21:17 ` Junio C Hamano
2026-02-27 6:31 ` Paul Tarjan
2026-02-25 20:17 ` [PATCH v6 05/10] fsmonitor: deduplicate IPC path logic for Unix platforms Paul Tarjan via GitGitGadget
2026-02-25 21:30 ` Junio C Hamano
2026-02-27 6:31 ` Paul Tarjan
2026-02-25 20:17 ` [PATCH v6 06/10] fsmonitor: deduplicate settings " Paul Tarjan via GitGitGadget
2026-02-25 21:31 ` Junio C Hamano
2026-02-27 6:31 ` Paul Tarjan
2026-02-25 20:17 ` [PATCH v6 07/10] fsmonitor: implement filesystem change listener for Linux Paul Tarjan via GitGitGadget
2026-02-25 20:17 ` [PATCH v6 08/10] fsmonitor: add tests " Paul Tarjan via GitGitGadget
2026-02-25 20:17 ` [PATCH v6 09/10] run-command: add close_fd_above_stderr option Paul Tarjan via GitGitGadget
2026-02-25 21:41 ` Junio C Hamano
2026-02-25 20:17 ` [PATCH v6 10/10] fsmonitor: close inherited file descriptors and detach in daemon Paul Tarjan via GitGitGadget
2026-02-26 0:27 ` [PATCH v7 00/10] fsmonitor: implement filesystem change listener for Linux Paul Tarjan via GitGitGadget
2026-02-26 0:27 ` [PATCH v7 01/10] fsmonitor: fix khash memory leak in do_handle_client Paul Tarjan via GitGitGadget
2026-03-04 7:42 ` Patrick Steinhardt
2026-03-04 18:17 ` Paul Tarjan
2026-02-26 0:27 ` [PATCH v7 02/10] fsmonitor: fix hashmap memory leak in fsmonitor_run_daemon Paul Tarjan via GitGitGadget
2026-03-04 7:42 ` Patrick Steinhardt
2026-03-04 18:17 ` Paul Tarjan
2026-02-26 0:27 ` [PATCH v7 03/10] compat/win32: add pthread_cond_timedwait Paul Tarjan via GitGitGadget
2026-03-04 7:42 ` Patrick Steinhardt
2026-03-04 18:17 ` Paul Tarjan
2026-02-26 0:27 ` [PATCH v7 04/10] fsmonitor: use pthread_cond_timedwait for cookie wait Paul Tarjan via GitGitGadget
2026-03-04 7:42 ` Patrick Steinhardt
2026-03-04 18:17 ` Paul Tarjan
2026-02-26 0:27 ` [PATCH v7 05/10] fsmonitor: deduplicate IPC path logic for Unix platforms Paul Tarjan via GitGitGadget
2026-03-04 7:42 ` Patrick Steinhardt
2026-03-04 18:17 ` Paul Tarjan
2026-02-26 0:27 ` [PATCH v7 06/10] fsmonitor: deduplicate settings " Paul Tarjan via GitGitGadget
2026-03-04 7:43 ` Patrick Steinhardt
2026-03-04 18:17 ` Paul Tarjan
2026-02-26 0:27 ` [PATCH v7 07/10] fsmonitor: implement filesystem change listener for Linux Paul Tarjan via GitGitGadget
2026-03-04 7:43 ` Patrick Steinhardt
2026-03-04 18:17 ` Paul Tarjan
2026-02-26 0:27 ` [PATCH v7 08/10] fsmonitor: add tests " Paul Tarjan via GitGitGadget
2026-03-04 7:43 ` Patrick Steinhardt
2026-03-04 18:17 ` Paul Tarjan
2026-02-26 0:27 ` [PATCH v7 09/10] run-command: add close_fd_above_stderr option Paul Tarjan via GitGitGadget
2026-02-26 0:27 ` [PATCH v7 10/10] fsmonitor: close inherited file descriptors and detach in daemon Paul Tarjan via GitGitGadget
2026-03-04 7:43 ` Patrick Steinhardt
2026-03-04 18:17 ` Paul Tarjan
2026-02-26 15:34 ` [PATCH v7 00/10] fsmonitor: implement filesystem change listener for Linux Junio C Hamano
2026-03-04 18:15 ` [PATCH v8 00/12] " Paul Tarjan via GitGitGadget
2026-03-04 18:15 ` [PATCH v8 01/12] fsmonitor: fix khash memory leak in do_handle_client Paul Tarjan via GitGitGadget
2026-03-04 18:15 ` [PATCH v8 02/12] fsmonitor: fix hashmap memory leak in fsmonitor_run_daemon Paul Tarjan via GitGitGadget
2026-03-04 18:15 ` [PATCH v8 03/12] compat/win32: add pthread_cond_timedwait Paul Tarjan via GitGitGadget
2026-03-04 18:15 ` [PATCH v8 04/12] fsmonitor: use pthread_cond_timedwait for cookie wait Paul Tarjan via GitGitGadget
2026-03-04 18:15 ` [PATCH v8 05/12] fsmonitor: rename fsm-ipc-darwin.c to fsm-ipc-unix.c Paul Tarjan via GitGitGadget
2026-03-04 18:15 ` [PATCH v8 06/12] fsmonitor: rename fsm-settings-darwin.c to fsm-settings-unix.c Paul Tarjan via GitGitGadget
2026-03-04 18:15 ` [PATCH v8 07/12] fsmonitor: implement filesystem change listener for Linux Paul Tarjan via GitGitGadget
2026-03-04 18:15 ` [PATCH v8 08/12] run-command: add close_fd_above_stderr option Paul Tarjan via GitGitGadget
2026-03-04 20:51 ` Junio C Hamano
2026-03-05 0:49 ` [PATCH v8 09/12] " Paul Tarjan
2026-03-05 4:13 ` Junio C Hamano
2026-03-05 6:38 ` [PATCH v9 09/12] run-command: add pre-exec callback for child processes Paul Tarjan
2026-03-04 18:15 ` [PATCH v8 09/12] fsmonitor: close inherited file descriptors and detach in daemon Paul Tarjan via GitGitGadget
2026-03-04 18:15 ` [PATCH v8 10/12] fsmonitor: add timeout to daemon stop command Paul Tarjan via GitGitGadget
2026-03-04 18:15 ` [PATCH v8 11/12] fsmonitor: add tests for Linux Paul Tarjan via GitGitGadget
2026-03-04 18:15 ` [PATCH v8 12/12] fsmonitor: convert shown khash to strset in do_handle_client Paul Tarjan via GitGitGadget
2026-03-05 0:51 ` Paul Tarjan via GitGitGadget [this message]
2026-03-05 0:51 ` [PATCH v9 01/12] fsmonitor: fix khash memory leak " Paul Tarjan via GitGitGadget
2026-03-05 0:51 ` [PATCH v9 02/12] fsmonitor: fix hashmap memory leak in fsmonitor_run_daemon Paul Tarjan via GitGitGadget
2026-03-05 0:51 ` [PATCH v9 03/12] compat/win32: add pthread_cond_timedwait Paul Tarjan via GitGitGadget
2026-03-05 0:51 ` [PATCH v9 04/12] fsmonitor: use pthread_cond_timedwait for cookie wait Paul Tarjan via GitGitGadget
2026-03-05 0:51 ` [PATCH v9 05/12] fsmonitor: rename fsm-ipc-darwin.c to fsm-ipc-unix.c Paul Tarjan via GitGitGadget
2026-03-05 0:51 ` [PATCH v9 06/12] fsmonitor: rename fsm-settings-darwin.c to fsm-settings-unix.c Paul Tarjan via GitGitGadget
2026-03-05 0:51 ` [PATCH v9 07/12] fsmonitor: implement filesystem change listener for Linux Paul Tarjan via GitGitGadget
2026-03-05 0:51 ` [PATCH v9 08/12] run-command: add pre-exec callback for child processes Paul Tarjan via GitGitGadget
2026-03-05 0:51 ` [PATCH v9 09/12] fsmonitor: close inherited file descriptors and detach in daemon Paul Tarjan via GitGitGadget
2026-03-05 0:51 ` [PATCH v9 10/12] fsmonitor: add timeout to daemon stop command Paul Tarjan via GitGitGadget
2026-03-05 0:51 ` [PATCH v9 11/12] fsmonitor: add tests for Linux Paul Tarjan via GitGitGadget
2026-03-05 0:52 ` [PATCH v9 12/12] fsmonitor: convert shown khash to strset in do_handle_client Paul Tarjan via GitGitGadget
2026-03-05 1:16 ` [PATCH v10 00/12] fsmonitor: implement filesystem change listener for Linux Paul Tarjan via GitGitGadget
2026-03-05 1:16 ` [PATCH v10 01/12] fsmonitor: fix khash memory leak in do_handle_client Paul Tarjan via GitGitGadget
2026-03-05 1:16 ` [PATCH v10 02/12] fsmonitor: fix hashmap memory leak in fsmonitor_run_daemon Paul Tarjan via GitGitGadget
2026-03-05 1:16 ` [PATCH v10 03/12] compat/win32: add pthread_cond_timedwait Paul Tarjan via GitGitGadget
2026-03-05 1:16 ` [PATCH v10 04/12] fsmonitor: use pthread_cond_timedwait for cookie wait Paul Tarjan via GitGitGadget
2026-03-05 1:16 ` [PATCH v10 05/12] fsmonitor: rename fsm-ipc-darwin.c to fsm-ipc-unix.c Paul Tarjan via GitGitGadget
2026-03-05 1:16 ` [PATCH v10 06/12] fsmonitor: rename fsm-settings-darwin.c to fsm-settings-unix.c Paul Tarjan via GitGitGadget
2026-03-05 1:16 ` [PATCH v10 07/12] fsmonitor: implement filesystem change listener for Linux Paul Tarjan via GitGitGadget
2026-03-05 1:16 ` [PATCH v10 08/12] run-command: add pre-exec callback for child processes Paul Tarjan via GitGitGadget
2026-03-05 1:16 ` [PATCH v10 09/12] fsmonitor: close inherited file descriptors and detach in daemon Paul Tarjan via GitGitGadget
2026-03-05 1:16 ` [PATCH v10 10/12] fsmonitor: add timeout to daemon stop command Paul Tarjan via GitGitGadget
2026-03-05 1:16 ` [PATCH v10 11/12] fsmonitor: add tests for Linux Paul Tarjan via GitGitGadget
2026-03-05 1:16 ` [PATCH v10 12/12] fsmonitor: convert shown khash to strset in do_handle_client Paul Tarjan via GitGitGadget
2026-03-05 6:55 ` [PATCH v11 00/12] fsmonitor: implement filesystem change listener for Linux Paul Tarjan via GitGitGadget
2026-03-05 6:55 ` [PATCH v11 01/12] fsmonitor: fix khash memory leak in do_handle_client Paul Tarjan via GitGitGadget
2026-03-05 6:55 ` [PATCH v11 02/12] fsmonitor: fix hashmap memory leak in fsmonitor_run_daemon Paul Tarjan via GitGitGadget
2026-03-05 6:55 ` [PATCH v11 03/12] compat/win32: add pthread_cond_timedwait Paul Tarjan via GitGitGadget
2026-03-05 6:55 ` [PATCH v11 04/12] fsmonitor: use pthread_cond_timedwait for cookie wait Paul Tarjan via GitGitGadget
2026-03-05 6:55 ` [PATCH v11 05/12] fsmonitor: rename fsm-ipc-darwin.c to fsm-ipc-unix.c Paul Tarjan via GitGitGadget
2026-03-05 6:55 ` [PATCH v11 06/12] fsmonitor: rename fsm-settings-darwin.c to fsm-settings-unix.c Paul Tarjan via GitGitGadget
2026-03-05 6:55 ` [PATCH v11 07/12] fsmonitor: implement filesystem change listener for Linux Paul Tarjan via GitGitGadget
2026-03-05 6:55 ` [PATCH v11 08/12] run-command: add close_fd_above_stderr option Paul Tarjan via GitGitGadget
2026-03-05 6:55 ` [PATCH v11 09/12] fsmonitor: close inherited file descriptors and detach in daemon Paul Tarjan via GitGitGadget
2026-03-05 6:55 ` [PATCH v11 10/12] fsmonitor: add timeout to daemon stop command Paul Tarjan via GitGitGadget
2026-03-05 6:55 ` [PATCH v11 11/12] fsmonitor: add tests for Linux Paul Tarjan via GitGitGadget
2026-03-05 6:55 ` [PATCH v11 12/12] fsmonitor: convert shown khash to strset in do_handle_client Paul Tarjan via GitGitGadget
2026-03-05 7:37 ` [PATCH v11 00/12] fsmonitor: implement filesystem change listener for Linux Patrick Steinhardt
2026-03-05 14:15 ` Paul Tarjan
2026-03-25 20:00 ` Junio C Hamano
2025-12-30 15:37 ` [PATCH v2] " Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.2147.v9.git.git.1772671920.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=github@paulisageek.com \
--cc=paul@paultarjan.com \
--cc=ps@pks.im \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox