diff options
| -rw-r--r-- | embassy-macros/src/lib.rs | 2 | ||||
| -rw-r--r-- | embassy/src/executor/mod.rs | 4 | ||||
| -rw-r--r-- | embassy/src/util/forever.rs | 6 |
3 files changed, 8 insertions, 4 deletions
diff --git a/embassy-macros/src/lib.rs b/embassy-macros/src/lib.rs index 091e08cfa..c2e2d9e27 100644 --- a/embassy-macros/src/lib.rs +++ b/embassy-macros/src/lib.rs | |||
| @@ -150,7 +150,7 @@ pub fn interrupt_take(item: TokenStream) -> TokenStream { | |||
| 150 | 150 | ||
| 151 | static TAKEN: ::core::sync::atomic::AtomicBool = ::core::sync::atomic::AtomicBool::new(false); | 151 | static TAKEN: ::core::sync::atomic::AtomicBool = ::core::sync::atomic::AtomicBool::new(false); |
| 152 | 152 | ||
| 153 | if TAKEN.compare_and_swap(false, true, ::core::sync::atomic::Ordering::AcqRel) { | 153 | if TAKEN.compare_exchange(false, true, ::core::sync::atomic::Ordering::AcqRel, ::core::sync::atomic::Ordering::Acquire).is_err() { |
| 154 | panic!("IRQ Already taken"); | 154 | panic!("IRQ Already taken"); |
| 155 | } | 155 | } |
| 156 | 156 | ||
diff --git a/embassy/src/executor/mod.rs b/embassy/src/executor/mod.rs index 845d94c2c..facd71d1b 100644 --- a/embassy/src/executor/mod.rs +++ b/embassy/src/executor/mod.rs | |||
| @@ -105,8 +105,8 @@ impl<F: Future + 'static> Task<F> { | |||
| 105 | if task | 105 | if task |
| 106 | .header | 106 | .header |
| 107 | .state | 107 | .state |
| 108 | .compare_and_swap(0, state, Ordering::AcqRel) | 108 | .compare_exchange(0, state, Ordering::AcqRel, Ordering::Acquire) |
| 109 | == 0 | 109 | .is_ok() |
| 110 | { | 110 | { |
| 111 | // Initialize the task | 111 | // Initialize the task |
| 112 | task.header.poll_fn.write(Self::poll); | 112 | task.header.poll_fn.write(Self::poll); |
diff --git a/embassy/src/util/forever.rs b/embassy/src/util/forever.rs index 80dc0edac..b1bfd1669 100644 --- a/embassy/src/util/forever.rs +++ b/embassy/src/util/forever.rs | |||
| @@ -19,7 +19,11 @@ impl<T> Forever<T> { | |||
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | pub fn put(&'static self, val: T) -> &'static mut T { | 21 | pub fn put(&'static self, val: T) -> &'static mut T { |
| 22 | if self.used.compare_and_swap(false, true, Ordering::SeqCst) { | 22 | if self |
| 23 | .used | ||
| 24 | .compare_exchange(false, true, Ordering::AcqRel, Ordering::Acquire) | ||
| 25 | .is_ok() | ||
| 26 | { | ||
| 23 | panic!("Forever.put() called multiple times"); | 27 | panic!("Forever.put() called multiple times"); |
| 24 | } | 28 | } |
| 25 | 29 | ||
