Releases: bertptrs/tracing-mutex
v0.3.2
v0.3.1
Added
-
On Rust 1.80 or newer, a wrapper for
std::sync::LazyLockis 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 for
tracing_mutex::parkinglotis now identical toparking_lot, and an example showing how to use
it as a drop-in replacement was added. -
Introduced
experimentalfeature, which will be used going forward to help evolve the API outside
the normal stability guarantees. APIs under this feature are not subject to semver or MSRV
guarantees. -
Added experimental api
tracing_mutex::util::reset_dependencies, which can be used to reset the
ordering information of a specific mutex when you need to reorder them. This API is unsafe, as its
use invalidates any of the deadlock prevention guarantees made.
Changed
- Reworked CI to better test continued support for the minimum supported Rust version
Fixed
- Support for
parking_lotandlock_apican now be enabled properly with the matching feature
names.
Deprecated
- The
parkinglotandlockapifeatures have been deprecated. They will be removed in version 0.4.
To fix it, you can use theparking_lotandlock_apifeatures respectively.
v0.3.0
Added
- The minimum supported Rust version is now defined as 1.70. Previously it was undefined.
- Wrappers for
std::syncprimitives can now be const 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.
Breaking
- Update parking_lot dependency to 0.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::TracingMutexis nowtracing_mutex::stdsync::tracing::Mutex, andtracing_mutex::stdsync::DebugMutexis 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::rawfor convenience.
Fixed
- 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.
v0.2.1
v0.2.0
Added
-
Generic support for wrapping mutexes that implement the traits provided by the
lock_apicrate. This can be used for creating support for other mutex providers that
implement it. -
Support for
parking_lotmutexes. Support includes type aliases for all
provided mutex types as well as a dedicatedOncewrapper. -
Simple benchmark to track the rough performance penalty incurred by dependency tracking.
Breaking
-
The library now requires edition 2021.
-
The
Mutex- andRwLockGuardsnow dereference toTrather 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 withRwLocks.
Changed
- The project now targets edition 2021
v0.1.2
Added
- Added missing type aliases for the guards returned by
DebugMutexandDebugRwLock. 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
- Fixed a corruption error where deallocating a previously cyclic mutex could result in a panic.
v0.1.1
Changed
- New data structure for interal dependency graph, resulting in quicker graph updates.
Fixed
- 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.