Revision history for Data-HashMap-Shared
0.09 2026-05-26
- Dead-reader rwlock recovery: SIGKILL'd worker holding rdlock no longer
pins the counter; 1024-slot per-process mirror enables wrlock ETIMEDOUT
to drain dead PIDs' contributions and force-reset when safe
- LRU rebuild on writer recovery if a dead writer left the chain inconsistent
- Cursor fixes: iter_pos/gen reset on cursor_seek shard switch;
double-decrement of iterating on exhausted cursor destroy/reset/seek
- SHM_VERSION 7 → 9 (header layout); existing 0.08 maps must be recreated
0.08 2026-05-18
- New ops: cas (string values), add_ttl, update_ttl, cas_take,
remove_multi (method), get_with_ttl (method)
0.07 2026-04-26
- anonymous mmap; new memfd/new from fd/sync
- sharded sync iterates all shards
- rwlock writers waiting split + crash recovery
- utf8-flag hash miss fix; header validation
- aarch64 CI matrix
0.06 2026-04-15
- Clarify new_sharded $max_entries is per-shard
- Improve benchmark tables in POD
0.05 2026-04-12
- Fix DESTROY ordering (zero IV before free)
- Add SEE ALSO cross-links to family modules
0.04 2026-04-06
- Fix timing-sensitive TTL tests for slow CI environments
0.03 2026-03-30
- Fix "panic: free from wrong pool" on threaded/DEBUGGING Perls
(use Perl allocator for SAVEFREEPV-managed buffers)
0.02 2026-03-17
- New ops: add, update, swap, cas, pop, shift, drain, set_multi,
get_multi, persist, set_ttl, touch, reserve, flush_expired_partial,
ttl_remaining, stats, arena_used, arena_cap, stat_evictions,
stat_expired, stat_recoveries
- Clock/second-chance eviction: lock-free LRU reads
- Hash-tag probe filtering, prefetch, lru_skip optimization
- SSE2-accelerated state scanning for iteration
- SSE2-accelerated tag matching in probe loops
- Inline small strings (≤7 bytes) stored in node structs, no arena overhead
- Batch get_multi with prefetch pipeline under single lock
- Fast monotonic clock (CLOCK_MONOTONIC_COARSE) for TTL paths
- Pre-sized copy_buf to avoid realloc on first access
- C-level sharding: new_sharded($path, $shards, ...) for parallel writes
- Cursor chains across shards with correct iterating/flush_deferred
- Harden header validation, fix cursor_seek gen tracking
- SHM_VERSION 7 (inline strings, monotonic timestamps)
0.01 2026-03-14
- 10 type-specialized shared-memory hash map variants (II, SS, SI, IS,
I16, I32, I16S, I32S, SI16, SI32)
- File-backed mmap(MAP_SHARED) for cross-process data sharing
- Futex-based read-write lock with seqlock for lock-free reads
- Lock-free atomic counters (incr/decr under read lock)
- Elastic hash table capacity (automatic grow/shrink)
- Arena allocator with free-list reclamation for string storage
- Keyword API via XS::Parse::Keyword
- Opt-in LRU eviction and per-key TTL (zero cost when disabled)
- Removal-safe iteration with deferred resize/compact
- Cursor API: independent iterators with seek, reset, nesting
- Stale lock recovery via PID tracking (auto-recover after 2s timeout)
- Diagnostic error messages from constructor
- Bundled xxHash 0.8.3 (XXH3_64bits) for hashing