git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v15 12/13] fsmonitor: add tests for Linux

From
PGPaul Tarjan via GitGitGadget <gitgitgadget@gmail.com>
Date
Apr 15, 2026, 13:27 UTC
Message-ID
<ffffd64a4baab2c6884cb07cebdc40e5e7c4f0a2.1776259657.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.2147.v15.git.git.1776259657.gitgitgadget@gmail.com>
From: Paul Tarjan <github@paulisageek.com>

Add a smoke test that verifies the filesystem actually delivers inotify events to the daemon. On some configurations (e.g., overlayfs with older kernels), inotify watches succeed but events are never delivered. The daemon cookie wait will time out, but every subsequent test would fail. Skip the entire test file early when this is detected.

Add a test that exercises rapid nested directory creation to verify the daemon correctly handles the EEXIST race between recursive scan and queued inotify events. When IN_MASK_CREATE is available and a directory watch is added during recursive registration, the kernel may also deliver a queued IN_CREATE event for the same directory. The second inotify_add_watch() returns EEXIST, which must be treated as harmless. An earlier version of the listener crashed in this scenario.

Reduce --start-timeout from the default 60 seconds to 10 seconds so that tests fail promptly when the daemon cannot start.

Harden the test helpers to work in environments without procps (e.g., Fedora CI): fall back to reading /proc/$pid/stat for the process group ID when ps is unavailable, guard stop_git() against an empty pgid, and redirect stderr from kill to /dev/null to avoid noise when processes have already exited.

Use set -m to enable job control in the submodule-pull test so that the background git pull gets its own process group, preventing the shell wait from blocking on the daemon. setsid() in the previous commit detaches the daemon itself, but the intermediate git pull process still needs its own process group for the test shell to manage it correctly.

Signed-off-by: Paul Tarjan <github@paulisageek.com>
---
 t/t7527-builtin-fsmonitor.sh | 88 +++++++++++++++++++++++++++++++++---
 1 file changed, 81 insertions(+), 7 deletions(-)
diff --git a/t/t7527-builtin-fsmonitor.sh b/t/t7527-builtin-fsmonitor.sh
index 409cd0cd12..ed12f218de 100755
--- a/t/t7527-builtin-fsmonitor.sh
+++ b/t/t7527-builtin-fsmonitor.sh
@@ -10,9 +10,57 @@ then
 	test_done
 fi
 
+# Verify that the filesystem delivers events to the daemon.
+# On some configurations (e.g., overlayfs with older kernels),
+# inotify watches succeed but events are never delivered.  The
+# cookie wait will time out and the daemon logs a trace message.
+#
+# Use "timeout" (if available) to guard each step against hangs.
+maybe_timeout () {
+	if type timeout >/dev/null 2>&1
+	then
+		timeout "$@"
+	else
+		shift
+		"$@"
+	fi
+}
+verify_fsmonitor_works () {
+	git init test_fsmonitor_smoke || return 1
+
+	GIT_TRACE_FSMONITOR="$PWD/smoke.trace" &&
+	export GIT_TRACE_FSMONITOR &&
+	maybe_timeout 30 \
+		git -C test_fsmonitor_smoke fsmonitor--daemon start \
+			--start-timeout=10
+	ret=$?
+	unset GIT_TRACE_FSMONITOR
+	if test $ret -ne 0
+	then
+		rm -rf test_fsmonitor_smoke smoke.trace
+		return 1
+	fi
+
+	maybe_timeout 10 \
+		test-tool -C test_fsmonitor_smoke fsmonitor-client query \
+			--token 0 >/dev/null 2>&1
+	maybe_timeout 5 \
+		git -C test_fsmonitor_smoke fsmonitor--daemon stop 2>/dev/null
+	! grep -q "cookie_wait timed out" "$PWD/smoke.trace" 2>/dev/null
+	ret=$?
+	rm -rf test_fsmonitor_smoke smoke.trace
+	return $ret
+}
+
+if ! verify_fsmonitor_works
+then
+	skip_all="filesystem does not deliver fsmonitor events (container/overlayfs?)"
+	test_done
+fi
+
 stop_daemon_delete_repo () {
 	r=$1 &&
-	test_might_fail git -C $r fsmonitor--daemon stop &&
+	{ maybe_timeout 30 git -C $r fsmonitor--daemon stop 2>/dev/null || :; } &&
 	rm -rf $1
 }
 
@@ -67,7 +115,7 @@ start_daemon () {
 			export GIT_TEST_FSMONITOR_TOKEN
 		fi &&
 
-		git $r fsmonitor--daemon start &&
+		git $r fsmonitor--daemon start --start-timeout=10 &&
 		git $r fsmonitor--daemon status
 	)
 }
@@ -520,6 +568,28 @@ test_expect_success 'directory changes to a file' '
 	grep "^event: dir1$" .git/trace
 '
 
+test_expect_success 'rapid nested directory creation' '
+	test_when_finished "git fsmonitor--daemon stop; rm -rf rapid" &&
+
+	start_daemon --tf "$PWD/.git/trace" &&
+
+	# Rapidly create nested directories to exercise race conditions
+	# where directory watches may be added concurrently during
+	# event processing and recursive scanning.
+	for i in $(test_seq 1 20)
+	do
+		mkdir -p "rapid/nested/dir$i/subdir/deep" || return 1
+	done &&
+
+	# Give the daemon time to process all events
+	sleep 1 &&
+
+	test-tool fsmonitor-client query --token 0 &&
+
+	# Verify daemon is still running (did not crash)
+	git fsmonitor--daemon status
+'
+
 # The next few test cases exercise the token-resync code.  When filesystem
 # drops events (because of filesystem velocity or because the daemon isn't
 # polling fast enough), we need to discard the cached data (relative to the
@@ -910,7 +980,10 @@ test_expect_success "submodule absorbgitdirs implicitly starts daemon" '
 start_git_in_background () {
 	git "$@" &
 	git_pid=$!
-	git_pgid=$(ps -o pgid= -p $git_pid)
+	git_pgid=$(ps -o pgid= -p $git_pid 2>/dev/null ||
+		awk '{print $5}' /proc/$git_pid/stat 2>/dev/null) &&
+	git_pgid="${git_pgid## }" &&
+	git_pgid="${git_pgid%% }"
 	nr_tries_left=10
 	while true
 	do
@@ -921,15 +994,16 @@ start_git_in_background () {
 		fi
 		sleep 1
 		nr_tries_left=$(($nr_tries_left - 1))
-	done >/dev/null 2>&1 &
+	done >/dev/null 2>&1 3>&- 4>&- 5>&- 6>&- 7>&- &
 	watchdog_pid=$!
 	wait $git_pid
 }
 
 stop_git () {
-	while kill -0 -- -$git_pgid
+	test -n "$git_pgid" || return 0
+	while kill -0 -- -$git_pgid 2>/dev/null
 	do
-		kill -- -$git_pgid
+		kill -- -$git_pgid 2>/dev/null
 		sleep 1
 	done
 }
@@ -944,7 +1018,7 @@ stop_watchdog () {
 
 test_expect_success !MINGW "submodule implicitly starts daemon by pull" '
 	test_atexit "stop_watchdog" &&
-	test_when_finished "stop_git; rm -rf cloned super sub" &&
+	test_when_finished "set +m; stop_git; rm -rf cloned super sub" &&
 
 	create_super super &&
 	create_sub sub &&
-- 
gitgitgadget
Previous: Paul Tarjan via GitGitGadgetNext: Paul Tarjan via GitGitGadget
Message 203 of 211 in “fsmonitor: implement filesystem change listener for Linux”
  1. fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Dec 30, 2025
  2. Junio C HamanoDec 30, 2025
  3. fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Dec 30, 2025
  4. fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Dec 30, 2025
  5. fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Dec 31, 2025
  6. Patrick SteinhardtJan 5, 2026
  7. Junio C HamanoFeb 20, 2026
  8. Paul TarjanFeb 21, 2026
  9. Junio C HamanoFeb 21, 2026
  10. Patrick SteinhardtFeb 23, 2026
  11. Junio C HamanoFeb 23, 2026
  12. Patrick SteinhardtFeb 23, 2026
  13. Paul TarjanFeb 24, 2026
  14. Patrick SteinhardtFeb 24, 2026
  15. fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Feb 24, 2026
  16. Patrick SteinhardtFeb 24, 2026
  17. 00/10 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Feb 25, 2026
  18. 01/10 fsmonitor: fix khash memory leak in do_handle_clientPaul Tarjan via GitGitGadget, Feb 25, 2026
  19. Junio C HamanoFeb 25, 2026
  20. 02/10 fsmonitor: fix hashmap memory leak in fsmonitor_run_daemonPaul Tarjan via GitGitGadget, Feb 25, 2026
  21. 03/10 compat/win32: add pthread_cond_timedwaitPaul Tarjan via GitGitGadget, Feb 25, 2026
  22. 04/10 fsmonitor: use pthread_cond_timedwait for cookie waitPaul Tarjan via GitGitGadget, Feb 25, 2026
  23. Junio C HamanoFeb 25, 2026
  24. Paul TarjanFeb 27, 2026
  25. Junio C HamanoFeb 27, 2026
  26. Paul TarjanFeb 28, 2026
  27. Junio C HamanoFeb 25, 2026
  28. Paul TarjanFeb 27, 2026
  29. 05/10 fsmonitor: deduplicate IPC path logic for Unix platformsPaul Tarjan via GitGitGadget, Feb 25, 2026
  30. Junio C HamanoFeb 25, 2026
  31. Paul TarjanFeb 27, 2026
  32. 06/10 fsmonitor: deduplicate settings logic for Unix platformsPaul Tarjan via GitGitGadget, Feb 25, 2026
  33. Junio C HamanoFeb 25, 2026
  34. Paul TarjanFeb 27, 2026
  35. 07/10 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Feb 25, 2026
  36. 08/10 fsmonitor: add tests for LinuxPaul Tarjan via GitGitGadget, Feb 25, 2026
  37. 09/10 run-command: add close_fd_above_stderr optionPaul Tarjan via GitGitGadget, Feb 25, 2026
  38. Junio C HamanoFeb 25, 2026
  39. 10/10 fsmonitor: close inherited file descriptors and detach in daemonPaul Tarjan via GitGitGadget, Feb 25, 2026
  40. 00/10 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Feb 26, 2026
  41. 01/10 fsmonitor: fix khash memory leak in do_handle_clientPaul Tarjan via GitGitGadget, Feb 26, 2026
  42. Patrick SteinhardtMar 4, 2026
  43. Paul TarjanMar 4, 2026
  44. 02/10 fsmonitor: fix hashmap memory leak in fsmonitor_run_daemonPaul Tarjan via GitGitGadget, Feb 26, 2026
  45. Patrick SteinhardtMar 4, 2026
  46. Paul TarjanMar 4, 2026
  47. 03/10 compat/win32: add pthread_cond_timedwaitPaul Tarjan via GitGitGadget, Feb 26, 2026
  48. Patrick SteinhardtMar 4, 2026
  49. Paul TarjanMar 4, 2026
  50. 04/10 fsmonitor: use pthread_cond_timedwait for cookie waitPaul Tarjan via GitGitGadget, Feb 26, 2026
  51. Patrick SteinhardtMar 4, 2026
  52. Paul TarjanMar 4, 2026
  53. 05/10 fsmonitor: deduplicate IPC path logic for Unix platformsPaul Tarjan via GitGitGadget, Feb 26, 2026
  54. Patrick SteinhardtMar 4, 2026
  55. Paul TarjanMar 4, 2026
  56. 06/10 fsmonitor: deduplicate settings logic for Unix platformsPaul Tarjan via GitGitGadget, Feb 26, 2026
  57. Patrick SteinhardtMar 4, 2026
  58. Paul TarjanMar 4, 2026
  59. 07/10 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Feb 26, 2026
  60. Patrick SteinhardtMar 4, 2026
  61. Paul TarjanMar 4, 2026
  62. 08/10 fsmonitor: add tests for LinuxPaul Tarjan via GitGitGadget, Feb 26, 2026
  63. Patrick SteinhardtMar 4, 2026
  64. Paul TarjanMar 4, 2026
  65. 09/10 run-command: add close_fd_above_stderr optionPaul Tarjan via GitGitGadget, Feb 26, 2026
  66. 10/10 fsmonitor: close inherited file descriptors and detach in daemonPaul Tarjan via GitGitGadget, Feb 26, 2026
  67. Patrick SteinhardtMar 4, 2026
  68. Paul TarjanMar 4, 2026
  69. Junio C HamanoFeb 26, 2026
  70. 00/12 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Mar 4, 2026
  71. 01/12 fsmonitor: fix khash memory leak in do_handle_clientPaul Tarjan via GitGitGadget, Mar 4, 2026
  72. 02/12 fsmonitor: fix hashmap memory leak in fsmonitor_run_daemonPaul Tarjan via GitGitGadget, Mar 4, 2026
  73. 03/12 compat/win32: add pthread_cond_timedwaitPaul Tarjan via GitGitGadget, Mar 4, 2026
  74. 04/12 fsmonitor: use pthread_cond_timedwait for cookie waitPaul Tarjan via GitGitGadget, Mar 4, 2026
  75. 05/12 fsmonitor: rename fsm-ipc-darwin.c to fsm-ipc-unix.cPaul Tarjan via GitGitGadget, Mar 4, 2026
  76. 06/12 fsmonitor: rename fsm-settings-darwin.c to fsm-settings-unix.cPaul Tarjan via GitGitGadget, Mar 4, 2026
  77. 07/12 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Mar 4, 2026
  78. 08/12 run-command: add close_fd_above_stderr optionPaul Tarjan via GitGitGadget, Mar 4, 2026
  79. Junio C HamanoMar 4, 2026
  80. Paul TarjanMar 5, 2026
  81. Junio C HamanoMar 5, 2026
  82. Paul TarjanMar 5, 2026
  83. 09/12 fsmonitor: close inherited file descriptors and detach in daemonPaul Tarjan via GitGitGadget, Mar 4, 2026
  84. 10/12 fsmonitor: add timeout to daemon stop commandPaul Tarjan via GitGitGadget, Mar 4, 2026
  85. 11/12 fsmonitor: add tests for LinuxPaul Tarjan via GitGitGadget, Mar 4, 2026
  86. 12/12 fsmonitor: convert shown khash to strset in do_handle_clientPaul Tarjan via GitGitGadget, Mar 4, 2026
  87. 00/12 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Mar 5, 2026
  88. 01/12 fsmonitor: fix khash memory leak in do_handle_clientPaul Tarjan via GitGitGadget, Mar 5, 2026
  89. 02/12 fsmonitor: fix hashmap memory leak in fsmonitor_run_daemonPaul Tarjan via GitGitGadget, Mar 5, 2026
  90. 03/12 compat/win32: add pthread_cond_timedwaitPaul Tarjan via GitGitGadget, Mar 5, 2026
  91. 04/12 fsmonitor: use pthread_cond_timedwait for cookie waitPaul Tarjan via GitGitGadget, Mar 5, 2026
  92. 05/12 fsmonitor: rename fsm-ipc-darwin.c to fsm-ipc-unix.cPaul Tarjan via GitGitGadget, Mar 5, 2026
  93. 06/12 fsmonitor: rename fsm-settings-darwin.c to fsm-settings-unix.cPaul Tarjan via GitGitGadget, Mar 5, 2026
  94. 07/12 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Mar 5, 2026
  95. 08/12 run-command: add pre-exec callback for child processesPaul Tarjan via GitGitGadget, Mar 5, 2026
  96. 09/12 fsmonitor: close inherited file descriptors and detach in daemonPaul Tarjan via GitGitGadget, Mar 5, 2026
  97. 10/12 fsmonitor: add timeout to daemon stop commandPaul Tarjan via GitGitGadget, Mar 5, 2026
  98. 11/12 fsmonitor: add tests for LinuxPaul Tarjan via GitGitGadget, Mar 5, 2026
  99. 12/12 fsmonitor: convert shown khash to strset in do_handle_clientPaul Tarjan via GitGitGadget, Mar 5, 2026
  100. 00/12 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Mar 5, 2026
  101. 01/12 fsmonitor: fix khash memory leak in do_handle_clientPaul Tarjan via GitGitGadget, Mar 5, 2026
  102. 02/12 fsmonitor: fix hashmap memory leak in fsmonitor_run_daemonPaul Tarjan via GitGitGadget, Mar 5, 2026
  103. 03/12 compat/win32: add pthread_cond_timedwaitPaul Tarjan via GitGitGadget, Mar 5, 2026
  104. 04/12 fsmonitor: use pthread_cond_timedwait for cookie waitPaul Tarjan via GitGitGadget, Mar 5, 2026
  105. 05/12 fsmonitor: rename fsm-ipc-darwin.c to fsm-ipc-unix.cPaul Tarjan via GitGitGadget, Mar 5, 2026
  106. 06/12 fsmonitor: rename fsm-settings-darwin.c to fsm-settings-unix.cPaul Tarjan via GitGitGadget, Mar 5, 2026
  107. 07/12 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Mar 5, 2026
  108. 08/12 run-command: add pre-exec callback for child processesPaul Tarjan via GitGitGadget, Mar 5, 2026
  109. 09/12 fsmonitor: close inherited file descriptors and detach in daemonPaul Tarjan via GitGitGadget, Mar 5, 2026
  110. 10/12 fsmonitor: add timeout to daemon stop commandPaul Tarjan via GitGitGadget, Mar 5, 2026
  111. 11/12 fsmonitor: add tests for LinuxPaul Tarjan via GitGitGadget, Mar 5, 2026
  112. 12/12 fsmonitor: convert shown khash to strset in do_handle_clientPaul Tarjan via GitGitGadget, Mar 5, 2026
  113. 00/12 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Mar 5, 2026
  114. 01/12 fsmonitor: fix khash memory leak in do_handle_clientPaul Tarjan via GitGitGadget, Mar 5, 2026
  115. 02/12 fsmonitor: fix hashmap memory leak in fsmonitor_run_daemonPaul Tarjan via GitGitGadget, Mar 5, 2026
  116. 03/12 compat/win32: add pthread_cond_timedwaitPaul Tarjan via GitGitGadget, Mar 5, 2026
  117. 04/12 fsmonitor: use pthread_cond_timedwait for cookie waitPaul Tarjan via GitGitGadget, Mar 5, 2026
  118. 05/12 fsmonitor: rename fsm-ipc-darwin.c to fsm-ipc-unix.cPaul Tarjan via GitGitGadget, Mar 5, 2026
  119. 06/12 fsmonitor: rename fsm-settings-darwin.c to fsm-settings-unix.cPaul Tarjan via GitGitGadget, Mar 5, 2026
  120. 07/12 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Mar 5, 2026
  121. 08/12 run-command: add close_fd_above_stderr optionPaul Tarjan via GitGitGadget, Mar 5, 2026
  122. 09/12 fsmonitor: close inherited file descriptors and detach in daemonPaul Tarjan via GitGitGadget, Mar 5, 2026
  123. 10/12 fsmonitor: add timeout to daemon stop commandPaul Tarjan via GitGitGadget, Mar 5, 2026
  124. 11/12 fsmonitor: add tests for LinuxPaul Tarjan via GitGitGadget, Mar 5, 2026
  125. 12/12 fsmonitor: convert shown khash to strset in do_handle_clientPaul Tarjan via GitGitGadget, Mar 5, 2026
  126. Patrick SteinhardtMar 5, 2026
  127. Paul TarjanMar 5, 2026
  128. Junio C HamanoMar 25, 2026
  129. Paul TarjanMar 29, 2026
  130. Patrick SteinhardtMar 30, 2026
  131. Junio C HamanoMar 31, 2026
  132. Paul TarjanMar 31, 2026
  133. Junio C HamanoMar 31, 2026
  134. 00/13 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Mar 31, 2026
  135. 01/13 fsmonitor: fix khash memory leak in do_handle_clientPaul Tarjan via GitGitGadget, Mar 31, 2026
  136. 02/13 fsmonitor: fix hashmap memory leak in fsmonitor_run_daemonPaul Tarjan via GitGitGadget, Mar 31, 2026
  137. 03/13 compat/win32: add pthread_cond_timedwaitPaul Tarjan via GitGitGadget, Mar 31, 2026
  138. 04/13 fsmonitor: use pthread_cond_timedwait for cookie waitPaul Tarjan via GitGitGadget, Mar 31, 2026
  139. 05/13 fsmonitor: rename fsm-ipc-darwin.c to fsm-ipc-unix.cPaul Tarjan via GitGitGadget, Mar 31, 2026
  140. 06/13 fsmonitor: rename fsm-settings-darwin.c to fsm-settings-unix.cPaul Tarjan via GitGitGadget, Mar 31, 2026
  141. 07/13 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Mar 31, 2026
  142. 08/13 run-command: add close_fd_above_stderr optionPaul Tarjan via GitGitGadget, Mar 31, 2026
  143. 09/13 fsmonitor: close inherited file descriptors and detach in daemonPaul Tarjan via GitGitGadget, Mar 31, 2026
  144. 10/13 fsmonitor: add timeout to daemon stop commandPaul Tarjan via GitGitGadget, Mar 31, 2026
  145. 11/13 fsmonitor: add tests for LinuxPaul Tarjan via GitGitGadget, Mar 31, 2026
  146. 12/13 fsmonitor: convert shown khash to strset in do_handle_clientPaul Tarjan via GitGitGadget, Mar 31, 2026
  147. 13/13 fsmonitor: fix split-index bitmap bounds in tweak_fsmonitor()Paul Tarjan via GitGitGadget, Mar 31, 2026
  148. Junio C HamanoMar 31, 2026
  149. Junio C HamanoMar 31, 2026
  150. Paul TarjanApr 1, 2026
  151. Paul TarjanApr 8, 2026
  152. Johannes SchindelinApr 4, 2026
  153. Paul TarjanApr 5, 2026
  154. Johannes SchindelinApr 5, 2026
  155. Paul TarjanApr 5, 2026
  156. Junio C HamanoApr 6, 2026
  157. 00/13 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Apr 6, 2026
  158. 01/13 t9210: disable GIT_TEST_SPLIT_INDEX for scalar clone testsPaul Tarjan via GitGitGadget, Apr 6, 2026
  159. Junio C HamanoApr 7, 2026
  160. Junio C HamanoApr 7, 2026
  161. 02/13 fsmonitor: fix khash memory leak in do_handle_clientPaul Tarjan via GitGitGadget, Apr 6, 2026
  162. 03/13 fsmonitor: fix hashmap memory leak in fsmonitor_run_daemonPaul Tarjan via GitGitGadget, Apr 6, 2026
  163. 04/13 compat/win32: add pthread_cond_timedwaitPaul Tarjan via GitGitGadget, Apr 6, 2026
  164. 05/13 fsmonitor: use pthread_cond_timedwait for cookie waitPaul Tarjan via GitGitGadget, Apr 6, 2026
  165. 06/13 fsmonitor: rename fsm-ipc-darwin.c to fsm-ipc-unix.cPaul Tarjan via GitGitGadget, Apr 6, 2026
  166. 07/13 fsmonitor: rename fsm-settings-darwin.c to fsm-settings-unix.cPaul Tarjan via GitGitGadget, Apr 6, 2026
  167. 08/13 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Apr 6, 2026
  168. 09/13 run-command: add close_fd_above_stderr optionPaul Tarjan via GitGitGadget, Apr 6, 2026
  169. 10/13 fsmonitor: close inherited file descriptors and detach in daemonPaul Tarjan via GitGitGadget, Apr 6, 2026
  170. 11/13 fsmonitor: add timeout to daemon stop commandPaul Tarjan via GitGitGadget, Apr 6, 2026
  171. 12/13 fsmonitor: add tests for LinuxPaul Tarjan via GitGitGadget, Apr 6, 2026
  172. 13/13 fsmonitor: convert shown khash to strset in do_handle_clientPaul Tarjan via GitGitGadget, Apr 6, 2026
  173. 00/13 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Apr 9, 2026
  174. 01/13 t9210, t9211: disable GIT_TEST_SPLIT_INDEX for scalar clone testsPaul Tarjan via GitGitGadget, Apr 9, 2026
  175. 02/13 fsmonitor: fix khash memory leak in do_handle_clientPaul Tarjan via GitGitGadget, Apr 9, 2026
  176. 03/13 fsmonitor: fix hashmap memory leak in fsmonitor_run_daemonPaul Tarjan via GitGitGadget, Apr 9, 2026
  177. 04/13 compat/win32: add pthread_cond_timedwaitPaul Tarjan via GitGitGadget, Apr 9, 2026
  178. 05/13 fsmonitor: use pthread_cond_timedwait for cookie waitPaul Tarjan via GitGitGadget, Apr 9, 2026
  179. 06/13 fsmonitor: rename fsm-ipc-darwin.c to fsm-ipc-unix.cPaul Tarjan via GitGitGadget, Apr 9, 2026
  180. 07/13 fsmonitor: rename fsm-settings-darwin.c to fsm-settings-unix.cPaul Tarjan via GitGitGadget, Apr 9, 2026
  181. 08/13 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Apr 9, 2026
  182. 09/13 run-command: add close_fd_above_stderr optionPaul Tarjan via GitGitGadget, Apr 9, 2026
  183. 10/13 fsmonitor: close inherited file descriptors and detach in daemonPaul Tarjan via GitGitGadget, Apr 9, 2026
  184. 11/13 fsmonitor: add timeout to daemon stop commandPaul Tarjan via GitGitGadget, Apr 9, 2026
  185. 12/13 fsmonitor: add tests for LinuxPaul Tarjan via GitGitGadget, Apr 9, 2026
  186. SZEDER GáborApr 14, 2026
  187. Junio C HamanoApr 14, 2026
  188. Jeff KingApr 14, 2026
  189. 13/13 fsmonitor: convert shown khash to strset in do_handle_clientPaul Tarjan via GitGitGadget, Apr 9, 2026
  190. Junio C HamanoApr 9, 2026
  191. 00/13 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Apr 15, 2026
  192. 01/13 t9210, t9211: disable GIT_TEST_SPLIT_INDEX for scalar clone testsPaul Tarjan via GitGitGadget, Apr 15, 2026
  193. 02/13 fsmonitor: fix khash memory leak in do_handle_clientPaul Tarjan via GitGitGadget, Apr 15, 2026
  194. 03/13 fsmonitor: fix hashmap memory leak in fsmonitor_run_daemonPaul Tarjan via GitGitGadget, Apr 15, 2026
  195. 04/13 compat/win32: add pthread_cond_timedwaitPaul Tarjan via GitGitGadget, Apr 15, 2026
  196. 05/13 fsmonitor: use pthread_cond_timedwait for cookie waitPaul Tarjan via GitGitGadget, Apr 15, 2026
  197. 06/13 fsmonitor: rename fsm-ipc-darwin.c to fsm-ipc-unix.cPaul Tarjan via GitGitGadget, Apr 15, 2026
  198. 07/13 fsmonitor: rename fsm-settings-darwin.c to fsm-settings-unix.cPaul Tarjan via GitGitGadget, Apr 15, 2026
  199. 08/13 fsmonitor: implement filesystem change listener for LinuxPaul Tarjan via GitGitGadget, Apr 15, 2026
  200. 09/13 run-command: add close_fd_above_stderr optionPaul Tarjan via GitGitGadget, Apr 15, 2026
  201. 10/13 fsmonitor: close inherited file descriptors and detach in daemonPaul Tarjan via GitGitGadget, Apr 15, 2026
  202. 11/13 fsmonitor: add timeout to daemon stop commandPaul Tarjan via GitGitGadget, Apr 15, 2026
  203. 12/13 fsmonitor: add tests for LinuxPaul Tarjan via GitGitGadget, Apr 15, 2026
  204. 13/13 fsmonitor: convert shown khash to strset in do_handle_clientPaul Tarjan via GitGitGadget, Apr 15, 2026
  205. Ben KnobleApr 15, 2026
  206. Junio C HamanoApr 15, 2026
  207. Ben KnobleApr 15, 2026
  208. Junio C HamanoMay 12, 2026
  209. D. Ben KnobleMay 12, 2026
  210. Junio C HamanoApr 15, 2026
  211. Junio C HamanoDec 30, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.