| # Changelog |
| |
| All notable changes to this project will be documented in this file. |
| |
| The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), |
| and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
| |
| # Unreleased |
| |
| ### Added |
| |
| ### Changed |
| |
| ### Fixed |
| |
| # [0.9.8] - 2023-04-03 |
| |
| ### Fixed |
| |
| - Unsoundness in `Once::try_call_once` caused by an `Err(_)` result |
| |
| # [0.9.7] - 2023-03-27 |
| |
| ### Fixed |
| |
| - Relaxed accidentally restricted `Send`/`Sync` bounds for `Mutex` guards |
| |
| # [0.9.6] - 2023-03-13 |
| |
| ### Fixed |
| |
| - Relaxed accidentally restricted `Send`/`Sync` bounds for `RwLock` guards |
| |
| # [0.9.5] - 2023-02-07 |
| |
| ### Added |
| |
| - `FairMutex`, a new mutex implementation that reduces writer starvation. |
| - A MSRV policy: Rust 1.38 is currently required |
| |
| ### Changed |
| |
| - The crate's CI now has full MIRI integration, further improving the confidence you can have in the implementation. |
| |
| ### Fixed |
| |
| - Ensured that the crate's abstractions comply with stacked borrows rules. |
| - Unsoundness in the `RwLock` that could be triggered via a reader overflow |
| - Relaxed various `Send`/`Sync` bound requirements to make the crate more flexible |
| |
| # [0.9.4] - 2022-07-14 |
| |
| ### Fixed |
| |
| - Fixed unsoundness in `RwLock` on reader overflow |
| - Relaxed `Send`/`Sync` bounds for `SpinMutex` and `TicketMutex` (doesn't affect `Mutex` itself) |
| |
| # [0.9.3] - 2022-04-17 |
| |
| ### Added |
| |
| - Implemented `Default` for `Once` |
| - `Once::try_call_once` |
| |
| ### Fixed |
| |
| - Fixed bug that caused `Once::call_once` to incorrectly fail |
| |
| # [0.9.2] - 2021-07-09 |
| |
| ### Changed |
| |
| - Improved `Once` performance by reducing the memory footprint of internal state to one byte |
| |
| ### Fixed |
| |
| - Improved performance of `Once` by relaxing ordering guarantees and removing redundant checks |
| |
| # [0.9.1] - 2021-06-21 |
| |
| ### Added |
| |
| - Default type parameter on `Once` for better ergonomics |
| |
| # [0.9.0] - 2021-03-18 |
| |
| ### Changed |
| |
| - Placed all major API features behind feature flags |
| |
| ### Fixed |
| |
| - A compilation bug with the `lock_api` feature |
| |
| # [0.8.0] - 2021-03-15 |
| |
| ### Added |
| |
| - `Once::get_unchecked` |
| - `RelaxStrategy` trait with type parameter on all locks to support switching between relax strategies |
| |
| ### Changed |
| |
| - `lock_api1` feature is now named `lock_api` |
| |
| # [0.7.1] - 2021-01-12 |
| |
| ### Fixed |
| |
| - Prevented `Once` leaking the inner value upon drop |
| |
| # [0.7.0] - 2020-10-18 |
| |
| ### Added |
| |
| - `Once::initialized` |
| - `Once::get_mut` |
| - `Once::try_into_inner` |
| - `Once::poll` |
| - `RwLock`, `Mutex` and `Once` now implement `From<T>` |
| - `Lazy` type for lazy initialization |
| - `TicketMutex`, an alternative mutex implementation |
| - `std` feature flag to enable thread yielding instead of spinning |
| - `Mutex::is_locked`/`SpinMutex::is_locked`/`TicketMutex::is_locked` |
| - `Barrier` |
| |
| ### Changed |
| |
| - `Once::wait` now spins even if initialization has not yet started |
| - `Guard::leak` is now an associated function instead of a method |
| - Improved the performance of `SpinMutex` by relaxing unnecessarily conservative |
| ordering requirements |
| |
| # [0.6.0] - 2020-10-08 |
| |
| ### Added |
| |
| - More dynamic `Send`/`Sync` bounds for lock guards |
| - `lock_api` compatibility |
| - `Guard::leak` methods |
| - `RwLock::reader_count` and `RwLock::writer_count` |
| - `Display` implementation for guard types |
| |
| ### Changed |
| |
| - Made `Debug` impls of lock guards just show the inner type like `std` |