summaryrefslogtreecommitdiff
path: root/src/poisonable.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/poisonable.rs')
-rwxr-xr-xsrc/poisonable.rs40
1 files changed, 35 insertions, 5 deletions
diff --git a/src/poisonable.rs b/src/poisonable.rs
index 8dada90..d81b876 100755
--- a/src/poisonable.rs
+++ b/src/poisonable.rs
@@ -1,5 +1,5 @@
-use std::marker::PhantomData;
-use std::sync::atomic::AtomicBool;
+use core::marker::PhantomData;
+use core::sync::atomic::AtomicBool;
use crate::ThreadKey;
@@ -68,7 +68,7 @@ pub struct Poisonable<L> {
/// [`LockCollection`]: `crate::LockCollection`
pub struct PoisonRef<'a, G> {
guard: G,
- #[cfg(panic = "unwind")]
+ #[cfg(all(feature = "std", panic = "unwind"))]
flag: &'a PoisonFlag,
_phantom: PhantomData<&'a ()>,
}
@@ -137,13 +137,19 @@ pub type TryLockPoisonableResult<'flag, G> =
#[cfg(test)]
mod tests {
+ #[cfg(feature = "std")]
use std::sync::Arc;
+ use alloc::vec::Vec;
+
use super::*;
use crate::lockable::Lockable as _;
- use crate::{LockCollection, Mutex, RwLock, ThreadKey};
+ use crate::Mutex;
+ #[cfg(feature = "std")]
+ use crate::{LockCollection, RwLock, ThreadKey};
#[test]
+ #[cfg(feature = "std")]
fn locking_poisoned_mutex_returns_error_in_collection() {
let key = ThreadKey::get().unwrap();
let mutex = LockCollection::new(Poisonable::new(Mutex::new(42)));
@@ -169,6 +175,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn locking_poisoned_rwlock_returns_error_in_collection() {
let key = ThreadKey::get().unwrap();
let mutex = LockCollection::new(Poisonable::new(RwLock::new(42)));
@@ -202,6 +209,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn non_poisoned_get_mut_is_err() {
let mut mutex = Poisonable::new(Mutex::new(42));
@@ -226,6 +234,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn poisoned_into_inner() {
let mutex = Poisonable::from(Mutex::new("foo"));
@@ -250,6 +259,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn poisoned_into_child() {
let mutex = Poisonable::from(Mutex::new("foo"));
@@ -268,6 +278,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn scoped_lock_can_poison() {
let key = ThreadKey::get().unwrap();
let mutex = Poisonable::new(Mutex::new(42));
@@ -292,6 +303,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn scoped_try_lock_can_fail() {
let key = ThreadKey::get().unwrap();
let mutex = Poisonable::new(Mutex::new(42));
@@ -309,6 +321,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn scoped_try_lock_can_succeed() {
let rwlock = Poisonable::new(RwLock::new(42));
@@ -324,6 +337,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn scoped_read_can_poison() {
let key = ThreadKey::get().unwrap();
let mutex = Poisonable::new(RwLock::new(42));
@@ -348,6 +362,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn scoped_try_read_can_fail() {
let key = ThreadKey::get().unwrap();
let rwlock = Poisonable::new(RwLock::new(42));
@@ -365,6 +380,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn scoped_try_read_can_succeed() {
let rwlock = Poisonable::new(RwLock::new(42));
@@ -380,6 +396,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn display_works() {
let key = ThreadKey::get().unwrap();
let mutex = Poisonable::new(Mutex::new("Hello, world!"));
@@ -390,6 +407,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn ref_as_ref() {
let key = ThreadKey::get().unwrap();
let collection = LockCollection::new(Poisonable::new(Mutex::new("foo")));
@@ -401,6 +419,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn ref_as_mut() {
let key = ThreadKey::get().unwrap();
let collection = LockCollection::new(Poisonable::new(Mutex::new("foo")));
@@ -418,6 +437,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn guard_as_ref() {
let key = ThreadKey::get().unwrap();
let collection = Poisonable::new(Mutex::new("foo"));
@@ -429,6 +449,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn guard_as_mut() {
let key = ThreadKey::get().unwrap();
let mutex = Poisonable::new(Mutex::new("foo"));
@@ -446,6 +467,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn deref_mut_in_collection() {
let key = ThreadKey::get().unwrap();
let collection = LockCollection::new(Poisonable::new(Mutex::new(42)));
@@ -469,10 +491,14 @@ mod tests {
poisonable.get_ptrs(&mut lock_ptrs);
assert_eq!(lock_ptrs.len(), 1);
- assert!(std::ptr::addr_eq(lock_ptrs[0], &raw const poisonable.inner));
+ assert!(core::ptr::addr_eq(
+ lock_ptrs[0],
+ &raw const poisonable.inner
+ ));
}
#[test]
+ #[cfg(feature = "std")]
fn clear_poison_for_poisoned_mutex() {
let mutex = Arc::new(Poisonable::new(Mutex::new(0)));
let c_mutex = Arc::clone(&mutex);
@@ -497,6 +523,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn clear_poison_for_poisoned_rwlock() {
let lock = Arc::new(Poisonable::new(RwLock::new(0)));
let c_mutex = Arc::clone(&lock);
@@ -522,6 +549,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn error_as_ref() {
let mutex = Poisonable::new(Mutex::new("foo"));
@@ -543,6 +571,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn error_as_mut() {
let mutex = Poisonable::new(Mutex::new("foo"));
@@ -570,6 +599,7 @@ mod tests {
}
#[test]
+ #[cfg(feature = "std")]
fn try_error_from_lock_error() {
let mutex = Poisonable::new(Mutex::new("foo"));