aboutsummaryrefslogtreecommitdiffstats
path: root/components/servo_arc
diff options
context:
space:
mode:
Diffstat (limited to 'components/servo_arc')
-rw-r--r--components/servo_arc/lib.rs11
1 files changed, 3 insertions, 8 deletions
diff --git a/components/servo_arc/lib.rs b/components/servo_arc/lib.rs
index e2063c79a9c..3e6cd65e85d 100644
--- a/components/servo_arc/lib.rs
+++ b/components/servo_arc/lib.rs
@@ -349,15 +349,10 @@ impl<T: ?Sized> Arc<T> {
#[inline]
pub fn is_unique(&self) -> bool {
- // We can use Relaxed here, but the justification is a bit subtle.
+ // See the extensive discussion in [1] for why this needs to be Acquire.
//
- // The reason to use Acquire would be to synchronize with other threads
- // that are modifying the refcount with Release, i.e. to ensure that
- // their writes to memory guarded by this refcount are flushed. However,
- // we know that threads only modify the contents of the Arc when they
- // observe the refcount to be 1, and no other thread could observe that
- // because we're holding one strong reference here.
- self.inner().count.load(Relaxed) == 1
+ // [1] https://github.com/servo/servo/issues/21186
+ self.inner().count.load(Acquire) == 1
}
}