aboutsummaryrefslogtreecommitdiff
path: root/embassy-executor/src
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2023-03-27 00:22:00 +0200
committerDario Nieuwenhuis <[email protected]>2023-03-27 00:22:00 +0200
commit21400da073d7173e4c2445cbbcd2cd430f120ad1 (patch)
tree594730287090422285b097e16845c8e958e7122d /embassy-executor/src
parent805bca1f5aab8f95bf37007eb9be9016bc0dd8c1 (diff)
executor: Use AtomicPtr for signal_ctx, removes 1 unsafe.
Diffstat (limited to 'embassy-executor/src')
-rw-r--r--embassy-executor/src/raw/mod.rs10
1 files changed, 4 insertions, 6 deletions
diff --git a/embassy-executor/src/raw/mod.rs b/embassy-executor/src/raw/mod.rs
index 0120334b6..15ff18fc8 100644
--- a/embassy-executor/src/raw/mod.rs
+++ b/embassy-executor/src/raw/mod.rs
@@ -18,6 +18,7 @@ use core::marker::PhantomData;
18use core::mem; 18use core::mem;
19use core::pin::Pin; 19use core::pin::Pin;
20use core::ptr::NonNull; 20use core::ptr::NonNull;
21use core::sync::atomic::AtomicPtr;
21use core::task::{Context, Poll}; 22use core::task::{Context, Poll};
22 23
23use atomic_polyfill::{AtomicU32, Ordering}; 24use atomic_polyfill::{AtomicU32, Ordering};
@@ -288,13 +289,10 @@ impl<F: Future + 'static, const N: usize> TaskPool<F, N> {
288 } 289 }
289} 290}
290 291
291struct SignalCtx(*mut ());
292unsafe impl Sync for SignalCtx {}
293
294pub(crate) struct SyncExecutor { 292pub(crate) struct SyncExecutor {
295 run_queue: RunQueue, 293 run_queue: RunQueue,
296 signal_fn: fn(*mut ()), 294 signal_fn: fn(*mut ()),
297 signal_ctx: SignalCtx, 295 signal_ctx: AtomicPtr<()>,
298 296
299 #[cfg(feature = "integrated-timers")] 297 #[cfg(feature = "integrated-timers")]
300 pub(crate) timer_queue: timer_queue::TimerQueue, 298 pub(crate) timer_queue: timer_queue::TimerQueue,
@@ -312,7 +310,7 @@ impl SyncExecutor {
312 Self { 310 Self {
313 run_queue: RunQueue::new(), 311 run_queue: RunQueue::new(),
314 signal_fn, 312 signal_fn,
315 signal_ctx: SignalCtx(signal_ctx), 313 signal_ctx: AtomicPtr::new(signal_ctx),
316 314
317 #[cfg(feature = "integrated-timers")] 315 #[cfg(feature = "integrated-timers")]
318 timer_queue: timer_queue::TimerQueue::new(), 316 timer_queue: timer_queue::TimerQueue::new(),
@@ -333,7 +331,7 @@ impl SyncExecutor {
333 trace::task_ready_begin(task.as_ptr() as u32); 331 trace::task_ready_begin(task.as_ptr() as u32);
334 332
335 if self.run_queue.enqueue(cs, task) { 333 if self.run_queue.enqueue(cs, task) {
336 (self.signal_fn)(self.signal_ctx.0) 334 (self.signal_fn)(self.signal_ctx.load(Ordering::Relaxed))
337 } 335 }
338 } 336 }
339 337