From 89880727ece6be8515f32d3ad8f0f7e7b17216eb Mon Sep 17 00:00:00 2001 From: Bobby Holley Date: Tue, 17 Jul 2018 22:23:26 +0000 Subject: [PATCH] style: Use an acquire load for is_unique in servo_arc. Fixes #21186 Bug: 1476445 Reviewed-by: Manishearth Differential Revision: https://phabricator.services.mozilla.com/D2205 --- components/servo_arc/lib.rs | 11 +++-------- 1 file 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 Arc { #[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 } }