Revision history for Data::Heap::Shared

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
