| # 1.6.0 |
| |
| * Fix a data race reported by MIRI. |
| * Avoid violating stacked borrows (AFAIK these are still experimental and not |
| normative, but better safe than sorry). (#80). |
| * The `AccessConvert` wrapper is needed less often in practice (#77). |
| |
| # 1.5.1 |
| |
| * bug: Insufficient synchronization on weak platforms (#76). |
| |
| Never observed in practice (it's suspected practical weak platforms like ARM |
| are still stronger than the model), but still technically UB. |
| * docs: Mention triomphe's `ThinArc` around the fat-pointer limitations. |
| |
| # 1.5.0 |
| |
| * Support serde (by a feature). |
| |
| # 1.4.0 |
| |
| * Allow const-initializing ArcSwapOption (`const_empty` method). |
| |
| # 1.3.2 |
| |
| * More helpful description of the `AsRaw` trait (isn't implemented for owned |
| `Arc`/`Option<Arc>`). |
| |
| # 1.3.1 |
| |
| * Cache doc improvements. |
| |
| # 1.3.0 |
| |
| * Allow mapping of DynAccess. |
| * Fix some lints. |
| * Don't leave threads running in tests/doctests. It's a bad form and annoys |
| miri. |
| |
| # 1.2.0 |
| |
| * Miri and 32 bit tests in CI. |
| * Making the writers lock-free. Soft-removing the IndependentStrategy, as it is |
| no longer needed (hidden and the same as the DafultStrategy). |
| |
| # 1.1.0 |
| |
| * Fix soundness bug around access::Map. Technically a breaking change, but |
| unlikely to bite and breaking seems to be the least bad option. #45. |
| |
| # 1.0.0 |
| |
| * Remove Clone implementation. People are often confused by it and it is easy to |
| emulate by hand in the rare case it is actually needed. |
| |
| # 1.0.0-rc1 |
| |
| * Get rid of the `load_signal_safe`. It only complicates things and it is niche; |
| signal-hook-registry has its own simplified version. |
| * Avoid `from_ptr(as_ptr())`. Slight change in `RefCnt::inc` which technically |
| is API breaking change, but this one should not matter in practice. |
| * Extend documentation about clone behaviour. |
| * Few more traits for Guard (`From<T: RefCnt>`, `Default`). |
| * Get rid of `rcu_unwap`, the whole concept is a trap. |
| * Hide the whole gen lock thing. |
| * Introduce the `Strategy`, as a high level way to choose how exactly the |
| locking happens. |
| - Not possible to implement by downstream users just yet, or call them. |
| - The CaS is its own trait for flexibility. |
| * Adding the SimpleGenLock experimental strategy. |
| - Not part of stability guarantees. |
| |
| # 0.4.7 |
| |
| * Rename the `unstable-weak` to `weak` feature. The support is now available on |
| 1.45 (currently in beta). |
| |
| # 0.4.6 |
| |
| * Adjust to `Weak::as_ptr` from std (the weak pointer support, relying on |
| unstable features). |
| * Support running on miri (without some optimizations), so dependencies may run |
| miri tests. |
| * Little optimization when waiting out the contention on write operations. |
| |
| # 0.4.5 |
| |
| * Added `Guard::from_inner`. |
| |
| # 0.4.4 |
| |
| * Top-level docs rewrite (less rambling, hopefully more readable). |
| |
| # 0.4.3 |
| |
| * Fix the `Display` implementation on `Guard` to correctly delegate to the |
| underlying `Display` implementation. |
| |
| # 0.4.2 |
| |
| * The Access functionality ‒ ability to pass a handle to subpart of held data to |
| somewhere with the ability to update itself. |
| * Mapped cache can take `FnMut` as well as `Fn`. |
| |
| # 0.4.1 |
| |
| * Mapped caches ‒ to allow giving access to parts of config only. |
| |
| # 0.4.0 |
| |
| * Support for Weak pointers. |
| * RefCnt implemented for Rc. |
| * Breaking: Big API cleanups. |
| - Peek is gone. |
| - Terminology of getting the data unified to `load`. |
| - There's only one kind of `Guard` now. |
| - Guard derefs to the `Arc`/`Option<Arc>` or similar. |
| - `Cache` got moved to top level of the crate. |
| - Several now unneeded semi-internal traits and trait methods got removed. |
| * Splitting benchmarks into a separate sub-crate. |
| * Minor documentation improvements. |
| |
| # 0.3.11 |
| |
| * Prevention against UB due to dropping Guards and overflowing the guard |
| counter (aborting instead, such problem is very degenerate anyway and wouldn't |
| work in the first place). |
| |
| # 0.3.10 |
| |
| * Tweak slot allocation to take smaller performance hit if some leases are held. |
| * Increase the number of lease slots per thread to 8. |
| * Added a cache for faster access by keeping an already loaded instance around. |
| |
| # 0.3.9 |
| |
| * Fix Send/Sync for Guard and Lease (they were broken in the safe but |
| uncomfortable direction ‒ not implementing them even if they could). |
| |
| # 0.3.8 |
| |
| * `Lease<Option<_>>::unwrap()`, `expect()` and `into_option()` for convenient |
| use. |
| |
| # 0.3.7 |
| |
| * Use the correct `#[deprecated]` syntax. |
| |
| # 0.3.6 |
| |
| * Another locking store (`PrivateSharded`) to complement the global and private |
| unsharded ones. |
| * Comparison to other crates/approaches in the docs. |
| |
| # 0.3.5 |
| |
| * Updates to documentation, made it hopefully easier to digest. |
| * Added the ability to separate gen-locks of one ArcSwapAny from others. |
| * Some speed improvements by inlining. |
| * Simplified the `lease` method internally, making it faster in optimistic |
| cases. |
| |
| # 0.3.4 |
| |
| * Another potentially weak ordering discovered (with even less practical effect |
| than the previous). |
| |
| # 0.3.3 |
| |
| * Increased potentially weak ordering (probably without any practical effect). |
| |
| # 0.3.2 |
| |
| * Documentation link fix. |
| |
| # 0.3.1 |
| |
| * Few convenience constructors. |
| * More tests (some randomized property testing). |
| |
| # 0.3.0 |
| |
| * `compare_and_swap` no longer takes `&Guard` as current as that is a sure way |
| to create a deadlock. |
| * Introduced `Lease` for temporary storage, which doesn't suffer from contention |
| like `load`, but doesn't block writes like `Guard`. The downside is it slows |
| down with number of held by the current thread. |
| * `compare_and_swap` and `rcu` uses leases. |
| * Made the `ArcSwap` as small as the pointer itself, by making the |
| shards/counters and generation ID global. This comes at a theoretical cost of |
| more contention when different threads use different instances. |
| |
| # 0.2.0 |
| |
| * Added an `ArcSwapOption`, which allows storing NULL values (as None) as well |
| as a valid pointer. |
| * `compare_and_swap` accepts borrowed `Arc` as `current` and doesn't consume one |
| ref count. |
| * Sharding internal counters, to improve performance on read-mostly contented |
| scenarios. |
| * Providing `peek_signal_safe` as the only async signal safe method to use |
| inside signal handlers. This removes the footgun with dropping the `Arc` |
| returned from `load` inside a signal handler. |
| |
| # 0.1.4 |
| |
| * The `peek` method to use the `Arc` inside without incrementing the reference |
| count. |
| * Some more (and hopefully better) benchmarks. |
| |
| # 0.1.3 |
| |
| * Documentation fix (swap is *not* lock-free in current implementation). |
| |
| # 0.1.2 |
| |
| * More freedom in the `rcu` and `rcu_unwrap` return types. |
| |
| # 0.1.1 |
| |
| * `rcu` support. |
| * `compare_and_swap` support. |
| * Added some primitive benchmarks. |
| |
| # 0.1.0 |
| |
| * Initial implementation. |