Releases: rantri/SharedMemoryStore
Releases · rantri/SharedMemoryStore
Release list
v3.0.0
Breaking changes
- NuGet
SharedMemoryStorenow creates and reads only SMS2 layout2.0,
resource protocol2, required-feature mask7, and optional-feature mask
0. - Removed the alternate layout selector, compatibility creator, fallback
engine, and retired mapped-record surface. Ordinary
SharedMemoryStoreOptions.Create(...)andCalculateRequiredBytes(...)are
the only managed sizing and creation helpers. - A noncurrent, unknown, or malformed mapping is rejected with
IncompatibleLayoutbefore key, descriptor, payload, slot, lease, or
participant projection. There is no in-place conversion.
Added
- Completed independent native
SharedMemoryStore1.0.0and Python
shared-memory-store1.0.0distributions on the same SMS2 protocol. - Advanced the fixed-width native boundary to C ABI
2.0, including
participant-aware layout sizing, protocol identity, cancellation, expanded
diagnostics, lifecycle operations, and ownership-safe opaque tokens. - Added complete C++, Python, and nine ordered .NET/C++/Python interoperability
coverage for publication, reservations, leases, removal/reuse, recovery,
participant capacity, diagnostics, corruption rejection, and held-cold-lock
progress.
Changed
- Hot publish, segmented publish, reserve, commit, abort, acquire, release,
remove, reclaim, recovery help, and diagnostics use mapped lock-free atomics
and bounded helping; OS synchronization is limited to cold create/open/close
coordination. - Managed diagnostics now expose the canonical five-field protocol identity,
SMS2 participant and directory state, and local retry/help/token/recovery
telemetry without obsolete tombstone or compaction fields. - Updated NuGet metadata and XML documentation for version
3.0.0, CMake
metadata for version1.0.0/ABI2.0, and Python metadata for version
1.0.0/required ABI2.0.
Migration
- Stop writers and readers, drain leases and reservations, close every handle,
remove or replace the noncurrent physical store, create a fresh SMS2 store,
and republish values from an application-owned authoritative source. - A side-by-side cutover must use a distinct public store name. Current clients
do not read an old mapping as a migration source.
v2.0.0
Added
- Added an explicitly selected C# lock-free key-value profile using mapped
layout2.0and resource protocol2, with direct reservation publication,
shared zero-copy leases, generation-fenced removal/reuse, participant
incarnations, explicit recovery, and bounded diagnostics. - Added
StoreProfile,CreateLockFree, profile-aware sizing,
ParticipantRecordCount, immutableStoreProtocolInfo, and the appended
ParticipantTableFullopen status.
Changed
- NuGet
SharedMemoryStoreadvances to2.0.0. Lock-free wait options bound
local retry, revalidation, helping, and backoff; they do not acquire a named
operation lock or wait for keys/capacity to appear. - Documented reservation tokens as exclusive single-producer lifetimes and
clarified logical removal,RemovePending, borrowed-view, recovery, and
local-handle disposal semantics.
Compatibility
- The legacy profile remains the default and preserves layout
1.2, resource
protocol1, public workflow signatures, and existing status numbers. - Layout
1.2and2.0are never reinterpreted in place or used by mixed
synchronization participants. Same-name upgrade and rollback require draining
handles, recreating the mapping, and republishing application-owned values. - C++ and Python
0.1.0remain layout-1.2-only and reject layout2.0; their
independently versioned packages and C ABI1.0are unchanged.
v1.0.2
Added
- Added an independently versioned CMake
SharedMemoryStore0.1.0
distribution with a C++20 protocol core, Windows and Linux adapters,
fixed-width C ABI1.0, move-only C++ RAII wrappers, install/export rules,
native tests, a clean-consumer project, and a basic sample. - Added the independently versioned Python
shared-memory-store0.1.0
distribution sources for Python 3.10 or newer. Its standard-libraryctypes
API loads the packaged native library and exposes context-managed stores,
leases, reservations, recovery, bounded waits, and diagnostics. - Added canonical language-neutral specifications and conformance fixtures for
mapped layout1.2and resource naming1, plus a complete ordered 3x3
.NET/C++/Python interoperability harness.
Fixed
- Corrected managed Linux opening of an existing store so the actual backing
file is mapped before layout validation; mismatched capacities now report
IncompatibleLayoutinstead of a mapping failure. - Made the managed implementation reject non-64-bit or non-little-endian
processes withUnsupportedPlatformbefore opening platform resources.
Packaging
- Updated the release workflow to Node 24-based immutable action pins while
retaining trusted NuGet publishing and draft-first GitHub release behavior.
Security
- Restricted Python native loading to the library packaged beside its modules;
it does not search the current directory,PATH, or system library paths. - Preserved the trusted same-host participant boundary across all three
implementations; no implementation claims protection from a malicious writer
that already has legitimate access to the shared resources.
Validation
- Validated native configure, build, CTest, install, clean CMake consumption,
Python source and installed-wheel behavior, and ordered .NET/C++/Python
interoperability on Windows x64 and Linux x64. - Validated mixed lifecycle, bounded-contention, crash-recovery, diagnostics,
Linux ownership cleanup, protocol fixtures, package consumption, and existing
managed regression scenarios.
Compatibility
- NuGet
SharedMemoryStoreadvances to1.0.2while preserving the managed
public API, status values, .NET BCL-only runtime dependency surface, mapped
layout1.2, and resource naming1. - CMake
SharedMemoryStoreand Pythonshared-memory-storeremain independently
versioned0.1.0alpha sibling distributions. They are not included in the
NuGet package, and this release does not publish them to PyPI or a native
package registry. - All three runtimes interoperate through mapped layout
1.2and resource
naming1; the native and Python distributions use C ABI1.0.
v1.0.1
Packaging
- Added Linux and Windows GitHub Actions validation and a manually triggered,
trusted-publishing release workflow for NuGet.org and GitHub Releases. - Added portable
.snupkgsymbols to improve package debugging without growing
the primary package.
Fixed
- Enforced one caller-selected wait budget across same-handle synchronization,
Linux lifecycle locking, and shared store locking. - Replaced destructive key-index rebuilds with crash-safe backward-shift
compaction and duplicate-tolerant cleanup. - Made Linux owner metadata replacement atomic and resistant to PID reuse, and
prevented failed opens from leaving live-looking owner records. - Rejected layout dimensions whose index, alignment, or section calculations
cannot be represented safely. - Moved stores that detect usage-count underflow into shared safe error mode.
- Prevented Windows mapping-handle leaks when view creation fails and removed
process-local Linux lock registry growth after handles are disposed. - Matched Windows
Global\mapping names with global synchronization so
cross-session participants cannot mutate one mapping under different mutexes. - Made segmented publish use one synchronized operation so bounded contention
cannot strand an internal reservation.
Security
- Linux shared-memory directories now use owner-only
0700permissions and
region, synchronization, owner, and lifecycle files use owner-only0600
permissions.
Compatibility
- Public API names, status values, and shared-memory layout remain compatible
with the1.0.0production contract.