Skip to content

Commit d1b2208

Browse files
committed
Controller & Scheduler: Use Acquire/Release ordering for atomics
1 parent 18cff8e commit d1b2208

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

src/control.rs

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ struct SchedulerInner {
1717
stop: AtomicF64,
1818
}
1919

20+
// Uses the canonical ordering for handover of values, i.e. `Acquire` on load and `Release` on
21+
// store.
2022
impl Scheduler {
2123
/// Create a new Scheduler. Initial playback state will be: inactive.
2224
pub fn new() -> Self {
@@ -31,24 +33,24 @@ impl Scheduler {
3133

3234
/// Retrieve playback start value
3335
pub fn get_start_at(&self) -> f64 {
34-
self.inner.start.load(Ordering::SeqCst)
36+
self.inner.start.load(Ordering::Acquire)
3537
}
3638

3739
/// Schedule playback start at this timestamp
3840
pub fn start_at(&self, start: f64) {
3941
// todo panic on invalid values, or when already called
40-
self.inner.start.store(start, Ordering::SeqCst);
42+
self.inner.start.store(start, Ordering::Release);
4143
}
4244

4345
/// Retrieve playback stop value
4446
pub fn get_stop_at(&self) -> f64 {
45-
self.inner.stop.load(Ordering::SeqCst)
47+
self.inner.stop.load(Ordering::Acquire)
4648
}
4749

4850
/// Stop playback at this timestamp
4951
pub fn stop_at(&self, stop: f64) {
5052
// todo panic on invalid values, or when already called
51-
self.inner.stop.store(stop, Ordering::SeqCst);
53+
self.inner.stop.store(stop, Ordering::Release);
5254
}
5355
}
5456

@@ -74,6 +76,8 @@ struct ControllerInner {
7476
duration: AtomicF64,
7577
}
7678

79+
// Uses the canonical ordering for handover of values, i.e. `Acquire` on load and `Release` on
80+
// store.
7781
impl Controller {
7882
/// Create a new Controller. It will not be active
7983
pub fn new() -> Self {
@@ -96,43 +100,43 @@ impl Controller {
96100
}
97101

98102
pub fn loop_(&self) -> bool {
99-
self.inner.loop_.load(Ordering::SeqCst)
103+
self.inner.loop_.load(Ordering::Acquire)
100104
}
101105

102106
pub fn set_loop(&self, loop_: bool) {
103-
self.inner.loop_.store(loop_, Ordering::SeqCst);
107+
self.inner.loop_.store(loop_, Ordering::Release);
104108
}
105109

106110
pub fn loop_start(&self) -> f64 {
107-
self.inner.loop_start.load(Ordering::SeqCst)
111+
self.inner.loop_start.load(Ordering::Acquire)
108112
}
109113

110114
pub fn set_loop_start(&self, loop_start: f64) {
111-
self.inner.loop_start.store(loop_start, Ordering::SeqCst);
115+
self.inner.loop_start.store(loop_start, Ordering::Release);
112116
}
113117

114118
pub fn loop_end(&self) -> f64 {
115-
self.inner.loop_end.load(Ordering::SeqCst)
119+
self.inner.loop_end.load(Ordering::Acquire)
116120
}
117121

118122
pub fn set_loop_end(&self, loop_end: f64) {
119-
self.inner.loop_end.store(loop_end, Ordering::SeqCst);
123+
self.inner.loop_end.store(loop_end, Ordering::Release);
120124
}
121125

122126
pub fn offset(&self) -> f64 {
123-
self.inner.offset.load(Ordering::SeqCst)
127+
self.inner.offset.load(Ordering::Acquire)
124128
}
125129

126130
pub fn set_offset(&self, offset: f64) {
127-
self.inner.offset.store(offset, Ordering::SeqCst);
131+
self.inner.offset.store(offset, Ordering::Release);
128132
}
129133

130134
pub fn duration(&self) -> f64 {
131-
self.inner.duration.load(Ordering::SeqCst)
135+
self.inner.duration.load(Ordering::Acquire)
132136
}
133137

134138
pub fn set_duration(&self, duration: f64) {
135-
self.inner.duration.store(duration, Ordering::SeqCst)
139+
self.inner.duration.store(duration, Ordering::Release)
136140
}
137141
}
138142

0 commit comments

Comments
 (0)