Skip to content

Commit f677c78

Browse files
Freax13phil-opp
andauthored
use swap and fix ordering
Co-authored-by: Philipp Oppermann <[email protected]>
1 parent 96e0917 commit f677c78

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

src/lib.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -153,15 +153,14 @@ impl<T> Singleton<T> {
153153
/// assert_eq!(FOO.try_get_mut(), None);
154154
/// ```
155155
pub fn try_get_mut(&self) -> Option<&mut T> {
156-
match self
157-
.used
158-
.compare_exchange(false, true, Ordering::Relaxed, Ordering::Relaxed)
159-
{
160-
Ok(_) => Some(unsafe {
156+
let already_used = self.used.swap(true, Ordering::AcqRel);
157+
if already_used {
158+
None
159+
} else {
160+
Some(unsafe {
161161
// SAFETY: no reference has been given out yet and we won't give out another.
162162
&mut *self.value.get()
163-
}),
164-
Err(_) => None,
163+
})
165164
}
166165
}
167166
}

0 commit comments

Comments
 (0)