You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
daemon_ownership::tests::spawn_lock_is_exclusive_within_process failed on macOS CI (PR #1338 run, merge of current main): panicked at crates/fbuild-paths/src/daemon_ownership.rs:226:14: lock must be available after release — the post-release re-acquire through the error-propagating variant returned Ok(None) (kernel reported EWOULDBLOCK) immediately after the holder was dropped.
Analysis
fbuild_core::file_lock::FileLockGuard releases by dropping the File (close-release). The soldr reference implementation this lock pattern was copied from (soldr-daemon/src/daemon/lifecycle/mod.rs) instead calls file.unlock() explicitly in Drop.
The prod contract already treats a transient None as benign (callers poll/retry / fall back to herd-spawn), so the test should assert the eventual property, not a single-shot one.
FileLockGuard::Drop performs an explicit unlock() before close, matching the soldr reference.
spawn_lock_is_exclusive_within_process re-acquires with a short bounded retry (~1 s deadline, 10 ms poll), still hard-failing on I/O errors — the lock MUST become available, just not necessarily on the first nanosecond after release.
Note
Main is currently red on Check (macos-latest) for this test, which blocks every open PR's macOS check until this lands.
Observed
daemon_ownership::tests::spawn_lock_is_exclusive_within_processfailed on macOS CI (PR #1338 run, merge of current main):panicked at crates/fbuild-paths/src/daemon_ownership.rs:226:14: lock must be available after release— the post-release re-acquire through the error-propagating variant returnedOk(None)(kernel reportedEWOULDBLOCK) immediately after the holder was dropped.Analysis
fbuild_core::file_lock::FileLockGuardreleases by dropping theFile(close-release). The soldr reference implementation this lock pattern was copied from (soldr-daemon/src/daemon/lifecycle/mod.rs) instead callsfile.unlock()explicitly inDrop.Noneas benign (callers poll/retry / fall back to herd-spawn), so the test should assert the eventual property, not a single-shot one.Fix (in PR #1338)
FileLockGuard::Dropperforms an explicitunlock()before close, matching the soldr reference.spawn_lock_is_exclusive_within_processre-acquires with a short bounded retry (~1 s deadline, 10 ms poll), still hard-failing on I/O errors — the lock MUST become available, just not necessarily on the first nanosecond after release.Note
Main is currently red on
Check (macos-latest)for this test, which blocks every open PR's macOS check until this lands.