Skip to content

Commit edf88f3

Browse files
committed
Relax SeqCst in heph-rt
This replaces all SeqCst atomic operations with Release, Acquire or AcqRel. Also see rust-lang/rust#122729.
1 parent 22ef147 commit edf88f3

File tree

7 files changed

+35
-35
lines changed

7 files changed

+35
-35
lines changed

rt/src/scheduler/inactive.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ mod tests {
449449

450450
impl Drop for DropTest {
451451
fn drop(&mut self) {
452-
let _ = self.0.fetch_add(1, Ordering::SeqCst);
452+
let _ = self.0.fetch_add(1, Ordering::AcqRel);
453453
}
454454
}
455455

rt/src/scheduler/shared/inactive.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -825,7 +825,7 @@ mod tests {
825825

826826
impl Drop for DropTest {
827827
fn drop(&mut self) {
828-
let _ = self.0.fetch_add(1, Ordering::SeqCst);
828+
let _ = self.0.fetch_add(1, Ordering::AcqRel);
829829
}
830830
}
831831

rt/src/test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -605,7 +605,7 @@ where
605605
M: Send + 'static,
606606
{
607607
static SYNC_WORKER_TEST_ID: AtomicUsize = AtomicUsize::new(10_000);
608-
let id = SYNC_WORKER_TEST_ID.fetch_add(1, Ordering::SeqCst);
608+
let id = SYNC_WORKER_TEST_ID.fetch_add(1, Ordering::AcqRel);
609609

610610
let shared = shared_internals();
611611
sync_worker::start(id, supervisor, actor, arg, options, shared, None).map(

rt/src/timers/tests.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ impl<const N: usize> WakerBuilder<N> {
3333
}
3434

3535
fn is_awoken(&self, n: usize) -> bool {
36-
self.awoken[n].load(Ordering::SeqCst)
36+
self.awoken[n].load(Ordering::Acquire)
3737
}
3838
}
3939

@@ -45,7 +45,7 @@ struct TaskWaker<const N: usize> {
4545

4646
impl<const N: usize> Wake for TaskWaker<N> {
4747
fn wake(self: Arc<Self>) {
48-
self.awoken[self.n].store(true, Ordering::SeqCst)
48+
self.awoken[self.n].store(true, Ordering::Release)
4949
}
5050
}
5151

rt/src/wakers/shared.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ impl Wakers {
2828
/// Static used to determine unique indices into `RUNTIMES`.
2929
static IDS: AtomicU8 = AtomicU8::new(0);
3030

31-
let id = IDS.fetch_add(1, Ordering::SeqCst);
31+
let id = IDS.fetch_add(1, Ordering::AcqRel);
3232
assert!(
3333
(id as usize) < MAX_RUNTIMES,
3434
"Created too many Heph `Runtime`s, maximum of {MAX_RUNTIMES}",

rt/tests/functional/runtime.rs

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -325,11 +325,11 @@ fn running_actors() {
325325
}
326326

327327
fn get(value: &AtomicUsize) -> usize {
328-
value.load(Ordering::SeqCst)
328+
value.load(Ordering::Acquire)
329329
}
330330

331331
fn incr(value: &AtomicUsize) {
332-
let _ = value.fetch_add(1, Ordering::SeqCst);
332+
let _ = value.fetch_add(1, Ordering::AcqRel);
333333
}
334334

335335
impl<NA> Supervisor<NA> for RunningSupervisor<NA::Argument>
@@ -513,12 +513,12 @@ fn external_thread_wakes_sync_actor() {
513513
}
514514

515515
async fn panic_actor<RT>(_: actor::Context<!, RT>, mark: &'static AtomicBool) {
516-
mark.store(true, Ordering::SeqCst);
516+
mark.store(true, Ordering::Release);
517517
panic!("on purpose panic");
518518
}
519519

520520
async fn ok_actor<RT>(_: actor::Context<!, RT>, mark: &'static AtomicBool) {
521-
mark.store(true, Ordering::SeqCst);
521+
mark.store(true, Ordering::Release);
522522
}
523523

524524
fn actor_drop_panic<RT>(_: actor::Context<!, RT>, mark: &'static AtomicBool) -> PanicOnDropFuture {
@@ -531,7 +531,7 @@ impl Future for PanicOnDropFuture {
531531
type Output = ();
532532

533533
fn poll(self: Pin<&mut Self>, _: &mut task::Context<'_>) -> Poll<Self::Output> {
534-
self.0.store(true, Ordering::SeqCst);
534+
self.0.store(true, Ordering::Release);
535535
Poll::Ready(())
536536
}
537537
}
@@ -543,12 +543,12 @@ impl Drop for PanicOnDropFuture {
543543
}
544544

545545
async fn panic_future(mark: &'static AtomicBool) {
546-
mark.store(true, Ordering::SeqCst);
546+
mark.store(true, Ordering::Release);
547547
panic!("on purpose panic");
548548
}
549549

550550
async fn ok_future(mark: &'static AtomicBool) {
551-
mark.store(true, Ordering::SeqCst);
551+
mark.store(true, Ordering::Release);
552552
}
553553

554554
#[test]
@@ -571,8 +571,8 @@ fn catches_actor_panics() {
571571
);
572572
runtime.start().unwrap();
573573

574-
assert!(PANIC_RAN.load(Ordering::SeqCst));
575-
assert!(OK_RAN.load(Ordering::SeqCst));
574+
assert!(PANIC_RAN.load(Ordering::Acquire));
575+
assert!(OK_RAN.load(Ordering::Acquire));
576576
}
577577

578578
#[test]
@@ -600,8 +600,8 @@ fn catches_local_actor_panics() {
600600
.unwrap();
601601
runtime.start().unwrap();
602602

603-
assert!(PANIC_RAN.load(Ordering::SeqCst));
604-
assert!(OK_RAN.load(Ordering::SeqCst));
603+
assert!(PANIC_RAN.load(Ordering::Acquire));
604+
assert!(OK_RAN.load(Ordering::Acquire));
605605
}
606606

607607
#[test]
@@ -624,8 +624,8 @@ fn catches_actor_panics_on_drop() {
624624
);
625625
runtime.start().unwrap();
626626

627-
assert!(PANIC_RAN.load(Ordering::SeqCst));
628-
assert!(OK_RAN.load(Ordering::SeqCst));
627+
assert!(PANIC_RAN.load(Ordering::Acquire));
628+
assert!(OK_RAN.load(Ordering::Acquire));
629629
}
630630

631631
#[test]
@@ -653,8 +653,8 @@ fn catches_local_actor_panics_on_drop() {
653653
.unwrap();
654654
runtime.start().unwrap();
655655

656-
assert!(PANIC_RAN.load(Ordering::SeqCst));
657-
assert!(OK_RAN.load(Ordering::SeqCst));
656+
assert!(PANIC_RAN.load(Ordering::Acquire));
657+
assert!(OK_RAN.load(Ordering::Acquire));
658658
}
659659

660660
#[test]
@@ -673,8 +673,8 @@ fn catches_future_panics() {
673673
);
674674
runtime.start().unwrap();
675675

676-
assert!(PANIC_RAN.load(Ordering::SeqCst));
677-
assert!(OK_RAN.load(Ordering::SeqCst));
676+
assert!(PANIC_RAN.load(Ordering::Acquire));
677+
assert!(OK_RAN.load(Ordering::Acquire));
678678
}
679679

680680
#[test]
@@ -698,8 +698,8 @@ fn catches_local_future_panics() {
698698
.unwrap();
699699
runtime.start().unwrap();
700700

701-
assert!(PANIC_RAN.load(Ordering::SeqCst));
702-
assert!(OK_RAN.load(Ordering::SeqCst));
701+
assert!(PANIC_RAN.load(Ordering::Acquire));
702+
assert!(OK_RAN.load(Ordering::Acquire));
703703
}
704704

705705
#[test]
@@ -718,8 +718,8 @@ fn catches_future_panics_on_drop() {
718718
);
719719
runtime.start().unwrap();
720720

721-
assert!(PANIC_RAN.load(Ordering::SeqCst));
722-
assert!(OK_RAN.load(Ordering::SeqCst));
721+
assert!(PANIC_RAN.load(Ordering::Acquire));
722+
assert!(OK_RAN.load(Ordering::Acquire));
723723
}
724724

725725
#[test]
@@ -743,6 +743,6 @@ fn catches_local_future_panics_on_drop() {
743743
.unwrap();
744744
runtime.start().unwrap();
745745

746-
assert!(PANIC_RAN.load(Ordering::SeqCst));
747-
assert!(OK_RAN.load(Ordering::SeqCst));
746+
assert!(PANIC_RAN.load(Ordering::Acquire));
747+
assert!(OK_RAN.load(Ordering::Acquire));
748748
}

rt/tests/process_signals.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,18 +86,18 @@ fn with_signal_handles() {
8686
runtime.start().unwrap();
8787

8888
// Make sure that all the actor received the signal once.
89-
assert_eq!(thread_local.load(Ordering::SeqCst), 1);
90-
assert_eq!(thread_safe1.load(Ordering::SeqCst), 1);
91-
assert_eq!(thread_safe2.load(Ordering::SeqCst), 1);
92-
assert_eq!(sync.load(Ordering::SeqCst), 1);
89+
assert_eq!(thread_local.load(Ordering::Acquire), 1);
90+
assert_eq!(thread_safe1.load(Ordering::Acquire), 1);
91+
assert_eq!(thread_safe2.load(Ordering::Acquire), 1);
92+
assert_eq!(sync.load(Ordering::Acquire), 1);
9393
}
9494

9595
async fn actor<RT>(mut ctx: actor::Context<Signal, RT>, got_signal: Arc<AtomicUsize>) {
9696
let _msg = ctx.receive_next().await.unwrap();
97-
got_signal.fetch_add(1, Ordering::SeqCst);
97+
got_signal.fetch_add(1, Ordering::AcqRel);
9898
}
9999

100100
fn sync_actor<RT>(mut ctx: sync::Context<Signal, RT>, got_signal: Arc<AtomicUsize>) {
101101
let _msg = ctx.receive_next().unwrap();
102-
got_signal.fetch_add(1, Ordering::SeqCst);
102+
got_signal.fetch_add(1, Ordering::AcqRel);
103103
}

0 commit comments

Comments
 (0)