Revision history for Data-ReqRep-Shared
0.09 2026-09-25
- Incompatible on-disk format: recreate existing files.
- Survive processes that die, stop, exec or reuse PIDs mid-request.
- Receiver-only replies; destroy cancels; cancel drops late replies.
- New ready_fd/ready notification; signal handlers run during waits.
- Anonymous channels use memfd; space reserved up front; stricter args.
0.08 2026-09-15
- Incompatible on-disk format: recreate existing files.
- Refuse attaching across PID namespaces or boots (see CONTAINERS).
- Refuse a world-writable file owned by another user.
- Fix slot leaks and lost or misdelivered replies when a cancel,
timeout, clear or crash recovery raced a reply.
- Fix crash recovery losing a slot when the recoverer is killed.
- Fix lost wakeups in send_wait and get_wait.
- Fix recv_multi, recv_wait_multi and drain losing requests on OOM.
- Fix recv_wait_multi(0) taking a request.
- Fix a worker killed mid-receive corrupting the next request.
- reply returns false for a corrupt id instead of croaking.
- new croaks after 10s instead of hanging on a held file lock.
- Recover a lock left ownerless by a corrupt file instead of hanging.
- eventfd setters keep their own duplicate of the descriptor.
0.07 2026-08-12
- Fix a client receiving another client's reply. A reply copied its
payload into the response slot before claiming it, so a cancel and
re-acquire completing in that window let the copy overwrite the new
owner's already-published reply; the new owner then read it as its
own, with no error reported anywhere. A reply now takes the slot
before writing to it.
- 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.06 2026-07-21
- Bound a shared slot's response length before copying it.
- Fetch get-magic on optional arguments before testing them.
0.05 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.04 2026-05-27
- slot_acquire: owner_pid CAS gates the state CAS, ACQUIRE on loads
(fixes recovery ABA where a fresh free+acquire could clobber a live owner)
- reply: re-check generation before publishing CAS and recover post-CAS
via gen bump (fixes TOCTOU where cancel+re-acquire could let a reply
land on the wrong owner's slot)
- slot_release: two-step CAS (owner_pid mypid->0, then state from->FREE)
prevents blind state-store from clobbering a freshly-acquired slot
- compute_layout: resp_stride in uint64 (was wrapping for resp_data_max
near UINT32_MAX -> replies overflowing into next slot)
- validate_header: reject files with resp_stride too small for slot data
- size(): read head before tail and clamp tail<head to 0
- plug mmap/fd leak in create_int / create_int_memfd on calloc OOM
0.03 2026-04-26
- arena underflow guard; init under flock
- strict fd validation; harden DESTROY
- hoist SV construction out of recv multi/drain mutex
- class prefix on client croaks
- eventfd consume returns count; MAKE OBJ macro fix
- idempotent eventfd; aarch64 CI matrix
0.02 2026-04-12
- Add SEE ALSO cross-links to family modules
0.01 2026-04-10
- Initial release
- Str variant: mutex-protected request queue with circular arena
- Int variant: lock-free Vyukov MPMC request queue
- Per-slot futex for targeted response delivery
- Generation counter for ABA-safe cancel/recycle
- PID-based stale lock and slot recovery
- Dual eventfd for async EV integration
- File-backed, anonymous, and memfd shared memory
Keyboard Shortcuts
Global
s
Focus search bar
?
Bring up this help dialog
GitHub
gp
Go to pull requests
gi
Go to GitHub issues (only if GitHub is preferred repository)