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_std]

View file

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

View file

@ -414,17 +414,11 @@ pub fn codegen(
let tq = unsafe { &mut *#app_path::#tq.as_mut_ptr() };
if let Some(mono) = #app_path::#m_ident.as_mut() {
tq.enqueue_unchecked(
nr,
|| #enable_interrupt,
|| #pend,
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()
}
#app_path::#m_ident.as_mut());
Ok(SpawnHandle { marker })
})

View file

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