summaryrefslogtreecommitdiff
path: root/src/collection.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/collection.rs')
-rw-r--r--src/collection.rs15
1 files changed, 3 insertions, 12 deletions
diff --git a/src/collection.rs b/src/collection.rs
index 8227362..c1c7697 100644
--- a/src/collection.rs
+++ b/src/collection.rs
@@ -1,5 +1,5 @@
+use std::cell::UnsafeCell;
use std::marker::PhantomData;
-use std::ptr::NonNull;
use crate::{key::Keyable, lockable::RawLock};
@@ -86,17 +86,8 @@ pub struct RefLockCollection<'a, L> {
// This type caches the sorting order of the locks and the fact that it doesn't
// contain any duplicates.
pub struct BoxedLockCollection<L> {
- // Box isn't used directly because it requires that the data not be
- // aliased. To resolve this, we'll have to ensure that only one of the
- // following is true at any given time:
- //
- // 1. We have a mutable reference to the data
- // 2. We have immutable references to the data and locks
- //
- // This is enforced by having #1 be true for a mutable or owned reference
- // to the value, and #2 is true for an immutable reference.
- data: NonNull<L>,
- locks: Vec<NonNull<dyn RawLock>>,
+ data: *const UnsafeCell<L>,
+ locks: Vec<&'static dyn RawLock>,
}
/// Locks a collection of locks using a retrying algorithm.