i-slint-live-preview: fix the flaky file watcher tests - #13284
Merged
Conversation
When a watched directory is deleted, the kernel drops its inotify watch on its own. If the reconcile unwatches the directory before notify has processed the deletion event, inotify_rm_watch fails with EINVAL, and the error was reported to the user. Reproduced with the removing_watched_directory_does_not_report_spurious_errors test, which failed 3 times in 700 runs under CPU load.
When the test root is removed while the watcher is alive, the missing files resolve to the nearest existing ancestor, the shared temp directory, and the teardown registers a watch on it. With the kqueue backend on macOS, notify reacts to writes in a watched directory by recursively watching the first unknown entry, so every parallel test creating its root in the temp directory makes the watcher walk arbitrary trees while the test waits for the worker to finish. Use tempfile for the test directories. The field order of the test context drops the watcher before the directory is removed.
tronical
approved these changes
Sep 8, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
refreshing_watch_set_stops_forwarding_old_pathshung on CI, likely macOS-only:the teardown removed the directory while the watcher was alive, so the watcher
fell back to watching the shared temp directory, which is very expensive with
kqueue. Drop the watcher before the directory, which now comes from
tempfile.While stress testing this locally on Linux, a different test,
removing_watched_directory_does_not_report_spurious_errors, failed a fewtimes with an EINVAL from
inotify_rm_watch: the kernel had already droppedthe watch of the deleted directory. Treat that error as transient.