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