Revision history for Data::Heap::Shared 0.11 2026-10-16 - Recover missed wakes after a producer dies. - Dispatch signal handlers safely during blocking waits. - Keep the original timeout across interrupted waits. 0.10 2026-09-26 - A process killed mid push or pop no longer loses, duplicates or misorders an element: the next lock holder finishes it. - Segments are reserved, so a full filesystem fails the constructor; DATA_HEAP_SHARED_SPARSE=1 skips the reservation. - A failed create no longer leaves a full-size file behind. 0.09 2026-09-15 - Recover a lock left ownerless by a corrupt file instead of hanging. 0.08 2026-08-12 - A file left by an interrupted create is recovered, not refused. - Hardening against tied and overloaded arguments. - unlink() reports a failed removal; a missing file is no error. 0.07 2026-07-22 - Fix a use-after-free in pop_wait(): an overloaded or tied timeout argument runs Perl that can destroy the heap, after which the already-captured handle was still used. Such a call now croaks. - Read the shared size once per push/pop, not repeatedly. - Resolve argument magic before capturing the path string. 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-06-01 - sift_down: compute child indices in 64-bit to avoid a uint32 overflow (2*idx+1) that corrupted the heap past ~2^31 entries 0.04 2026-05-27 - Cap capacity at UINT32_MAX; (uint32_t) cast in capacity check no longer silently truncates oversized files - heap_setup closes backing fd on calloc OOM (memfd/dup leak fix) 0.03 2026-04-26 - memfd sealing + factored validate header - stale-mutex wake; stat recoveries uint64 t - idempotent eventfd; aarch64 CI matrix 0.02 2026-04-12 - Make clear() concurrency-safe (mutex-protected) 0.01 2026-04-12 - Initial release