Revision history for Data::Stack::Shared

0.09  2026-09-26
    - Segments are reserved, so a full filesystem fails the constructor;
      DATA_STACK_SHARED_SPARSE=1 skips the reservation.
    - A failed create no longer leaves a full-size file behind.
    - Checking a half-created file no longer allocates it on tmpfs.
    - Long paths no longer cut the reason from error messages.

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 push/pop hanging on a slot abandoned by a killed peer.
    - Fix the reclaim path in pop() skipping the push_wait wake: a pusher
      blocked on a full stack stayed asleep forever after a pop reclaimed
      the abandoned slot instead of producing a value.
    - Fetch get-magic on optional arguments before testing them.

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
    - create: reject capacity > 2^31-1 (matches validate_header), so it can
      no longer silently truncate the uint32 capacity / fail on reopen
    - Str pop/pop_wait/peek: free temp buffer via SAVEFREEPV (leak if
      newSVpvn croaked on OOM)

0.04  2026-05-26
    - drain: bounded recovery (~2s) for slots stuck WRITING after a crashed pusher
    - slot publish is now CAS-only -- prevents a stalled-but-live pusher from
      clobbering a slot drain force-recovered to EMPTY

0.03  2026-04-26
    - MPMC per-slot state machine + file format v2
    - strict fd validation; drain() test coverage
    - stk drain: CAS-loop -> atomic exchange
    - idempotent eventfd; aarch64 CI matrix


0.02  2026-04-12
    - Add drain() -- concurrency-safe alternative to clear()

0.01  2026-04-11
    - Initial release
