1# Changelog 2 3All notable changes to this project will be documented in this file. 4 5The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 6and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 7 8# Unreleased 9 10### Added 11 12### Changed 13 14### Fixed 15 16# [0.9.8] - 2023-04-03 17 18### Fixed 19 20- Unsoundness in `Once::try_call_once` caused by an `Err(_)` result 21 22# [0.9.7] - 2023-03-27 23 24### Fixed 25 26- Relaxed accidentally restricted `Send`/`Sync` bounds for `Mutex` guards 27 28# [0.9.6] - 2023-03-13 29 30### Fixed 31 32- Relaxed accidentally restricted `Send`/`Sync` bounds for `RwLock` guards 33 34# [0.9.5] - 2023-02-07 35 36### Added 37 38- `FairMutex`, a new mutex implementation that reduces writer starvation. 39- A MSRV policy: Rust 1.38 is currently required 40 41### Changed 42 43- The crate's CI now has full MIRI integration, further improving the confidence you can have in the implementation. 44 45### Fixed 46 47- Ensured that the crate's abstractions comply with stacked borrows rules. 48- Unsoundness in the `RwLock` that could be triggered via a reader overflow 49- Relaxed various `Send`/`Sync` bound requirements to make the crate more flexible 50 51# [0.9.4] - 2022-07-14 52 53### Fixed 54 55- Fixed unsoundness in `RwLock` on reader overflow 56- Relaxed `Send`/`Sync` bounds for `SpinMutex` and `TicketMutex` (doesn't affect `Mutex` itself) 57 58# [0.9.3] - 2022-04-17 59 60### Added 61 62- Implemented `Default` for `Once` 63- `Once::try_call_once` 64 65### Fixed 66 67- Fixed bug that caused `Once::call_once` to incorrectly fail 68 69# [0.9.2] - 2021-07-09 70 71### Changed 72 73- Improved `Once` performance by reducing the memory footprint of internal state to one byte 74 75### Fixed 76 77- Improved performance of `Once` by relaxing ordering guarantees and removing redundant checks 78 79# [0.9.1] - 2021-06-21 80 81### Added 82 83- Default type parameter on `Once` for better ergonomics 84 85# [0.9.0] - 2021-03-18 86 87### Changed 88 89- Placed all major API features behind feature flags 90 91### Fixed 92 93- A compilation bug with the `lock_api` feature 94 95# [0.8.0] - 2021-03-15 96 97### Added 98 99- `Once::get_unchecked` 100- `RelaxStrategy` trait with type parameter on all locks to support switching between relax strategies 101 102### Changed 103 104- `lock_api1` feature is now named `lock_api` 105 106# [0.7.1] - 2021-01-12 107 108### Fixed 109 110- Prevented `Once` leaking the inner value upon drop 111 112# [0.7.0] - 2020-10-18 113 114### Added 115 116- `Once::initialized` 117- `Once::get_mut` 118- `Once::try_into_inner` 119- `Once::poll` 120- `RwLock`, `Mutex` and `Once` now implement `From<T>` 121- `Lazy` type for lazy initialization 122- `TicketMutex`, an alternative mutex implementation 123- `std` feature flag to enable thread yielding instead of spinning 124- `Mutex::is_locked`/`SpinMutex::is_locked`/`TicketMutex::is_locked` 125- `Barrier` 126 127### Changed 128 129- `Once::wait` now spins even if initialization has not yet started 130- `Guard::leak` is now an associated function instead of a method 131- Improved the performance of `SpinMutex` by relaxing unnecessarily conservative 132 ordering requirements 133 134# [0.6.0] - 2020-10-08 135 136### Added 137 138- More dynamic `Send`/`Sync` bounds for lock guards 139- `lock_api` compatibility 140- `Guard::leak` methods 141- `RwLock::reader_count` and `RwLock::writer_count` 142- `Display` implementation for guard types 143 144### Changed 145 146- Made `Debug` impls of lock guards just show the inner type like `std` 147