summaryrefslogtreecommitdiff
path: root/examples/stm32f3/src/bin
diff options
context:
space:
mode:
authorDario Nieuwenhuis <dirbaio@dirbaio.net>2022-04-25 22:09:04 +0200
committerDario Nieuwenhuis <dirbaio@dirbaio.net>2022-04-25 22:09:04 +0200
commitb27feb061936d191f456edc22b2f89d4fc172520 (patch)
treefa1b61a274deff0360ab92b36a4bc24f8b50c329 /examples/stm32f3/src/bin
parent52ed08cf9563b6b52e5991acd43614448b089850 (diff)
downloadembassy-b27feb061936d191f456edc22b2f89d4fc172520.zip
executor: fix unsoundness in InterruptExecutor::start.
The initial closure is not actually called in the interrupt, so this is illegally sending non-Send futures to the interrupt. Remove the closure, and return a SendSpawner instead.
Diffstat (limited to 'examples/stm32f3/src/bin')
-rw-r--r--examples/stm32f3/src/bin/multiprio.rs10
1 files changed, 4 insertions, 6 deletions
diff --git a/examples/stm32f3/src/bin/multiprio.rs b/examples/stm32f3/src/bin/multiprio.rs
index 1c940154..02380de7 100644
--- a/examples/stm32f3/src/bin/multiprio.rs
+++ b/examples/stm32f3/src/bin/multiprio.rs
@@ -124,17 +124,15 @@ fn main() -> ! {
let irq = interrupt::take!(UART4);
irq.set_priority(interrupt::Priority::P6);
let executor = EXECUTOR_HIGH.put(InterruptExecutor::new(irq));
- executor.start(|spawner| {
- unwrap!(spawner.spawn(run_high()));
- });
+ let spawner = executor.start();
+ unwrap!(spawner.spawn(run_high()));
// Medium-priority executor: SWI0_EGU0, priority level 7
let irq = interrupt::take!(UART5);
irq.set_priority(interrupt::Priority::P7);
let executor = EXECUTOR_MED.put(InterruptExecutor::new(irq));
- executor.start(|spawner| {
- unwrap!(spawner.spawn(run_med()));
- });
+ let spawner = executor.start();
+ unwrap!(spawner.spawn(run_med()));
// Low priority executor: runs in thread mode, using WFE/SEV
let executor = EXECUTOR_LOW.put(Executor::new());