Revision history for Data-PubSub-Shared
0.08 2026-07-23
- Int/Int32/Int16 publish now commits (value, sequence) atomically
and drops an already-superseded store, so a publisher preempted a
full lap can no longer revert a slot and stall a subscriber. Uses a
lock-free slot-wide CAS where available, else the header mutex; the
on-disk format is unchanged.
- poll_cb: re-extract the subscriber after each callback, so one that
destroys or replaces it croaks instead of using a freed pointer.
- REEXTRACT guards re-check SvROK first (a replaced invocant croaks).
- poll: compute the sequence displacement wraparound-safe, avoiding
signed-overflow UB (previously masked by Perl's -fwrapv).
- xt/stress.t: use a progress-based stall check, not a 30s deadline.
- Reject headers whose data offset and arena size overflow.
- Fetch get-magic on optional arguments before testing them.
0.07 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.06 2026-06-01
- Str publish_multi: hoist SvPV out of the mutex so a tied/overloaded
argument that dies mid-batch can't abandon the lock and deadlock peers
0.05 2026-05-27
- poll_wait: fix missed-wakeup race; increment sub_waiters before
polling and use SEQ_CST ordering with publisher fence
- Str: reject capacity * (msg_size+8) > 4GB at create to preserve
arena safety invariant (silent UINT32_MAX cap could let a publish
to slot K overwrite slot N's still-current data)
0.04 2026-04-26
- create: init header under flock
- harden DESTROY (handles + subscribers)
- factor MAKE OBJ macro
- eventfd consume returns accumulated count
- stat recoveries uint64 t; aarch64 CI matrix
0.03 2026-04-12
- Add SEE ALSO cross-links to family modules
0.02 2026-04-10
- XS::Parse::Keyword is now a required dependency
0.01 2026-04-09
- Initial release