Revision history for Data-Sync-Shared 0.08 2026-08-12 - Recover a file left behind by an interrupted create instead of leaving the path unopenable. - Hardening: re-entrancy with tied and overloaded arguments, and DESTROY on an invocant that is not one of ours. - Documentation and test-harness corrections. - unlink() reports a removal that failed; one already gone is not an error. 0.07 2026-07-22 - Fix guards releasing a lock from the wrong process: a forked child inheriting an RWLock, Condvar or Semaphore guard released the PARENT lock at exit, breaking mutual exclusion. Each guard now records the acquiring PID and releases only from it. - On-disk format change (v2 -> v3): an existing 0.06 file is refused; recreate it. - Give the Guard packages a $VERSION so PAUSE indexes them. - Reject acquire_n above the maximum instead of blocking forever. 0.06 2026-07-03 - Security and robustness hardening; backing files now created mode 0600 (pass a file-mode argument to new() for cross-user sharing). 0.05 2026-05-26 - RWLock dead-reader recovery: SIGKILL'd reader no longer pins the counter; 1024-slot per-process mirror drains dead contributions on wrlock timeout - SYNC_VERSION 1 -> 2 (RWLock files only); existing maps must be recreated 0.04 2026-04-26 - RWLock write-preferring + writers waiting split - Barrier broken-on-timeout + is broken() - sync() croaks; harden DESTROY - sync sem drain: CAS-loop -> atomic exchange - idempotent eventfd; aarch64 CI matrix 0.03 2026-04-13 - Add SEE ALSO cross-links to all family modules 0.02 2026-04-12 - Fix eventfd_set self-assignment fd guard - Add SEE ALSO cross-links to family modules 0.01 2026-04-11 - Initial release - Five primitives: Semaphore, Barrier, RWLock, Condvar, Once - Futex-based blocking, mmap shared memory, PID stale recovery - File-backed, anonymous, and memfd modes - eventfd integration for event loops - Guard objects for scope-based auto-release - Timeouts on all blocking operations