diff options
| author | Dario Nieuwenhuis <[email protected]> | 2023-03-27 00:22:00 +0200 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2023-03-27 00:22:00 +0200 |
| commit | 21400da073d7173e4c2445cbbcd2cd430f120ad1 (patch) | |
| tree | 594730287090422285b097e16845c8e958e7122d /embassy-executor/src/raw/mod.rs | |
| parent | 805bca1f5aab8f95bf37007eb9be9016bc0dd8c1 (diff) | |
executor: Use AtomicPtr for signal_ctx, removes 1 unsafe.
Diffstat (limited to 'embassy-executor/src/raw/mod.rs')
| -rw-r--r-- | embassy-executor/src/raw/mod.rs | 10 |
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; | |||
| 18 | use core::mem; | 18 | use core::mem; |
| 19 | use core::pin::Pin; | 19 | use core::pin::Pin; |
| 20 | use core::ptr::NonNull; | 20 | use core::ptr::NonNull; |
| 21 | use core::sync::atomic::AtomicPtr; | ||
| 21 | use core::task::{Context, Poll}; | 22 | use core::task::{Context, Poll}; |
| 22 | 23 | ||
| 23 | use atomic_polyfill::{AtomicU32, Ordering}; | 24 | use atomic_polyfill::{AtomicU32, Ordering}; |
| @@ -288,13 +289,10 @@ impl<F: Future + 'static, const N: usize> TaskPool<F, N> { | |||
| 288 | } | 289 | } |
| 289 | } | 290 | } |
| 290 | 291 | ||
| 291 | struct SignalCtx(*mut ()); | ||
| 292 | unsafe impl Sync for SignalCtx {} | ||
| 293 | |||
| 294 | pub(crate) struct SyncExecutor { | 292 | pub(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 | ||
