All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Unsoundness in
Once::try_call_once
caused by anErr(_)
result
- Relaxed accidentally restricted
Send
/Sync
bounds forMutex
guards
- Relaxed accidentally restricted
Send
/Sync
bounds forRwLock
guards
FairMutex
, a new mutex implementation that reduces writer starvation.- A MSRV policy: Rust 1.38 is currently required
- The crate's CI now has full MIRI integration, further improving the confidence you can have in the implementation.
- 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
- Fixed unsoundness in
RwLock
on reader overflow - Relaxed
Send
/Sync
bounds forSpinMutex
andTicketMutex
(doesn't affectMutex
itself)
- Implemented
Default
forOnce
Once::try_call_once
- Fixed bug that caused
Once::call_once
to incorrectly fail
- Improved
Once
performance by reducing the memory footprint of internal state to one byte
- Improved performance of
Once
by relaxing ordering guarantees and removing redundant checks
- Default type parameter on
Once
for better ergonomics
- Placed all major API features behind feature flags
- A compilation bug with the
lock_api
feature
Once::get_unchecked
RelaxStrategy
trait with type parameter on all locks to support switching between relax strategies
lock_api1
feature is now namedlock_api
- Prevented
Once
leaking the inner value upon drop
Once::initialized
Once::get_mut
Once::try_into_inner
Once::poll
RwLock
,Mutex
andOnce
now implementFrom<T>
Lazy
type for lazy initializationTicketMutex
, an alternative mutex implementationstd
feature flag to enable thread yielding instead of spinningMutex::is_locked
/SpinMutex::is_locked
/TicketMutex::is_locked
Barrier
Once::wait
now spins even if initialization has not yet startedGuard::leak
is now an associated function instead of a method- Improved the performance of
SpinMutex
by relaxing unnecessarily conservative ordering requirements
- More dynamic
Send
/Sync
bounds for lock guards lock_api
compatibilityGuard::leak
methodsRwLock::reader_count
andRwLock::writer_count
Display
implementation for guard types
- Made
Debug
impls of lock guards just show the inner type likestd