In src/borrow.rs functions AtomicBorrow::borrow and AtomicBorrow::release_mut conflict with each other.
This execution order will break internal state
Atomic value is 0 originally.
Thread #1 AtomicBorrow::borrow_mut() stores UNIQUE_BIT in atomic value.
Thread #2 AtomicBorrow::borrow() increments atomic value. Sees UNIQUE_BIT set
Thread #1 AtomicBorrow::release_mut() stores 0 in atomic value.
Thread #2 AtomicBorrow::borrow() decrements atomic value.
Atomic value is usize::MAX.
In
src/borrow.rsfunctionsAtomicBorrow::borrowandAtomicBorrow::release_mutconflict with each other.This execution order will break internal state
Atomic value is
0originally.Thread #1
AtomicBorrow::borrow_mut()storesUNIQUE_BITin atomic value.Thread #2
AtomicBorrow::borrow()increments atomic value. SeesUNIQUE_BITsetThread #1
AtomicBorrow::release_mut()stores0in atomic value.Thread #2
AtomicBorrow::borrow()decrements atomic value.Atomic value is
usize::MAX.