diff options
Diffstat (limited to 'src/collection/retry.rs')
| -rw-r--r-- | src/collection/retry.rs | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/collection/retry.rs b/src/collection/retry.rs index 28602f2..42d86e5 100644 --- a/src/collection/retry.rs +++ b/src/collection/retry.rs @@ -513,15 +513,19 @@ impl<L: Lockable> RetryingLockCollection<L> { pub fn try_lock<'g, 'key: 'g, Key: Keyable + 'key>( &'g self, key: Key, - ) -> Option<LockGuard<'key, L::Guard<'g>, Key>> { + ) -> Result<LockGuard<'key, L::Guard<'g>, Key>, Key> { unsafe { // safety: we're taking the thread key - self.raw_try_lock().then(|| LockGuard { - // safety: we just succeeded in locking everything - guard: self.guard(), - key, - _phantom: PhantomData, - }) + if self.raw_try_lock() { + Ok(LockGuard { + // safety: we just succeeded in locking everything + guard: self.guard(), + key, + _phantom: PhantomData, + }) + } else { + Err(key) + } } } |
