//! Tracing mutex wrappers for locks found in `std::sync`. //! //! This module provides wrappers for `std::sync` primitives with exactly the same API and //! functionality as their counterparts, with the exception that their acquisition order is tracked. //! //! Dedicated wrappers that provide the dependency tracing can be found in the [`tracing`] module. //! The original primitives are available from [`std::sync`], imported as [`raw`] for convenience. //! //! If debug assertions are enabled, this module imports the primitives from [`tracing`], otherwise //! it will import from [`raw`]. //! //! ```rust //! # use tracing_mutex::stdsync::tracing::Mutex; //! # use tracing_mutex::stdsync::tracing::RwLock; //! let mutex = Mutex::new(()); //! mutex.lock().unwrap(); //! //! let rwlock = RwLock::new(()); //! rwlock.read().unwrap(); //! ``` pub use std::sync as raw; #[cfg(not(debug_assertions))] pub use std::sync::{ Condvar, Mutex, MutexGuard, Once, OnceLock, RwLock, RwLockReadGuard, RwLockWriteGuard, }; #[cfg(debug_assertions)] pub use tracing::{ Condvar, Mutex, MutexGuard, Once, OnceLock, RwLock, RwLockReadGuard, RwLockWriteGuard, }; #[cfg(all(has_std__sync__LazyLock, debug_assertions))] pub use tracing::LazyLock; #[cfg(all(has_std__sync__LazyLock, not(debug_assertions)))] pub use std::sync::LazyLock; /// Dependency tracing versions of [`std::sync`]. pub mod tracing;