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.
-
On Rust 1.80 or newer, a wrapper for
std::sync::LazyLock
is now available. The MSRV has not been changed; older versions simply don't get this wrapper. -
Added missing const-initialisation wrappers for
parking_lot
. The API interface fortracing_mutex::parkinglot
is now identical toparking_lot
, and an example showing how to use it as a drop-in replacement was added.
- Reworked CI to better test continued support for the minimum supported Rust version
0.3.0 - 2023-09-09
- The minimum supported Rust version is now defined as 1.70. Previously it was undefined.
- Wrappers for
std::sync
primitives can now beconst
constructed. - Add support for
std::sync::OnceLock
- Added backtraces of mutex allocations to the cycle report. Capturing backtraces does incur some
overhead, this can be mitigated by disabling the
backtraces
feature which is enabled by default.
- Update
parking_lot
dependency to0.12
. - Restructured the crate to reduce typename verbosity. Wrapper names now match the name of the
primitive they wrap. Specific always/debug tracing versions have now moved to separate modules.
For example,
tracing_mutex::stdsync::TracingMutex
is nowtracing_mutex::stdsync::tracing::Mutex
, andtracing_mutex::stdsync::DebugMutex
is now calledtracing_mutex::stdsync::Mutex
. This hopefully reduces the visual noise while reading code that uses this in practice. Unwrapped primitives are reexported undertracing_mutex::stdsync::raw
for convenience.
- Enforce that all internal mutex guards are
!Send
. They already should be according to other reasons, but this adds extra security through the type system.
0.2.1 - 2022-05-23
- Build docs.rs documentation with all features enabled for completeness.
- Add support for
std::sync::Condvar
- The
parkinglot
module is now correctly enabled by theparkinglot
feature rather than thelockapi
feature.
0.2.0 - 2022-05-07
-
Generic support for wrapping mutexes that implement the traits provided by the
lock_api
crate. This can be used for creating support for other mutex providers that implement it. -
Support for
parking_lot
mutexes. Support includes type aliases for all provided mutex types as well as a dedicatedOnce
wrapper. -
Simple benchmark to track the rough performance penalty incurred by dependency tracking.
-
The library now requires edition 2021.
-
The
Mutex
- andRwLockGuards
now dereference toT
rather than the lock guard they wrap. This is technically a bugfix but can theoretically break existing code. -
Self-cycles are no longer allowed for lock dependencies. They previously were because it usually isn't a problem, but it can create RWR deadlocks with
RwLocks
.
- The project now targets edition 2021
0.1.2 - 2021-05-27
- Added missing type aliases for the guards returned by
DebugMutex
andDebugRwLock
. These new type aliases function the same as the ones they belong to, resolving to either the tracing versions when debug assertions are enabled or the standard one when they're not.
- Fixed a corruption error where deallocating a previously cyclic mutex could result in a panic.
0.1.1 - 2021-05-24
- New data structure for interal dependency graph, resulting in quicker graph updates.
- Fixed an issue where internal graph ordering indices were exponential rather than sequential. This caused the available IDs to run out way more quickly than intended.
0.1.0 - 2021-05-16 [YANKED]
Initial release.