Fixed UB in spawn_at

This commit is contained in:
Emil Fresk 2021-04-08 09:12:08 +02:00
parent 2068eae928
commit 51500a1d70
4 changed files with 11 additions and 17 deletions

View file

@ -1,4 +1,4 @@
//! examples/smallest.rs //! examples/type-usage.rs
#![no_main] #![no_main]
#![no_std] #![no_std]

View file

@ -22,6 +22,4 @@ proc-macro2 = "1"
proc-macro-error = "1" proc-macro-error = "1"
quote = "1" quote = "1"
syn = "1" syn = "1"
# rtic-syntax = "0.5.0-alpha.2" rtic-syntax = "0.5.0-alpha.2"
rtic-syntax = { path = "../../rtic-syntax", version = "0.5.0-alpha.2" }

View file

@ -414,17 +414,11 @@ pub fn codegen(
let tq = unsafe { &mut *#app_path::#tq.as_mut_ptr() }; let tq = unsafe { &mut *#app_path::#tq.as_mut_ptr() };
if let Some(mono) = #app_path::#m_ident.as_mut() { tq.enqueue_unchecked(
tq.enqueue_unchecked( nr,
nr, || #enable_interrupt,
|| #enable_interrupt, || #pend,
|| #pend, #app_path::#m_ident.as_mut());
mono)
} else {
// We can only use the timer queue if `init` has returned, and it
// writes the `Some(monotonic)` we are accessing here.
core::hint::unreachable_unchecked()
}
Ok(SpawnHandle { marker }) Ok(SpawnHandle { marker })
}) })

View file

@ -42,7 +42,7 @@ where
nr: NotReady<Mono, Task>, nr: NotReady<Mono, Task>,
enable_interrupt: F1, enable_interrupt: F1,
pend_handler: F2, pend_handler: F2,
mono: &mut Mono, mono: Option<&mut Mono>,
) where ) where
F1: FnOnce(), F1: FnOnce(),
F2: FnOnce(), F2: FnOnce(),
@ -57,7 +57,9 @@ where
if if_heap_max_greater_than_nr { if if_heap_max_greater_than_nr {
if Mono::DISABLE_INTERRUPT_ON_EMPTY_QUEUE && self.0.is_empty() { if Mono::DISABLE_INTERRUPT_ON_EMPTY_QUEUE && self.0.is_empty() {
mono.enable_timer(); if let Some(mono) = mono {
mono.enable_timer();
}
enable_interrupt(); enable_interrupt();
} }