From 04d23a1597dd7d1851ecb07e3d9ea6f9d4b2871d Mon Sep 17 00:00:00 2001 From: HaoranYi Date: Sun, 20 Feb 2022 20:30:49 -0600 Subject: [PATCH] fix memory ordering in append_vec (#23215) --- runtime/src/append_vec.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/runtime/src/append_vec.rs b/runtime/src/append_vec.rs index 0196816372..d94246f585 100644 --- a/runtime/src/append_vec.rs +++ b/runtime/src/append_vec.rs @@ -286,11 +286,11 @@ impl AppendVec { // This mutex forces append to be single threaded, but concurrent with reads // See UNSAFE usage in `append_ptr` let _lock = self.append_lock.lock().unwrap(); - self.current_len.store(0, Ordering::Relaxed); + self.current_len.store(0, Ordering::Release); } pub fn len(&self) -> usize { - self.current_len.load(Ordering::Relaxed) + self.current_len.load(Ordering::Acquire) } pub fn is_empty(&self) -> bool { @@ -360,7 +360,7 @@ impl AppendVec { offset = next_offset; num_accounts += 1; } - let aligned_current_len = u64_align!(self.current_len.load(Ordering::Relaxed)); + let aligned_current_len = u64_align!(self.current_len.load(Ordering::Acquire)); (offset == aligned_current_len, num_accounts) } @@ -419,7 +419,7 @@ impl AppendVec { for val in vals { self.append_ptr(offset, val.0, val.1) } - self.current_len.store(*offset, Ordering::Relaxed); + self.current_len.store(*offset, Ordering::Release); Some(pos) }