aboutsummaryrefslogtreecommitdiff
path: root/macros/src/codegen/dispatchers.rs
diff options
context:
space:
mode:
authorGravatar Emil Fresk <emil.fresk@gmail.com> 2021-04-08 18:25:09 +0200
committerGravatar Emil Fresk <emil.fresk@gmail.com> 2021-04-08 19:58:20 +0200
commit6aa0fb450f417ce899b43f4539eb226b391a0f2e (patch)
tree2202c8bb4aa2ba2451f025784a5bad99c4370b2e /macros/src/codegen/dispatchers.rs
parent43c5ad79c27fbdefa00e2373eba554ec11e1d9df (diff)
downloadrtic-6aa0fb450f417ce899b43f4539eb226b391a0f2e.tar.gz
rtic-6aa0fb450f417ce899b43f4539eb226b391a0f2e.tar.zst
rtic-6aa0fb450f417ce899b43f4539eb226b391a0f2e.zip
Goodbye static mut
Diffstat (limited to 'macros/src/codegen/dispatchers.rs')
-rw-r--r--macros/src/codegen/dispatchers.rs12
1 files changed, 8 insertions, 4 deletions
diff --git a/macros/src/codegen/dispatchers.rs b/macros/src/codegen/dispatchers.rs
index dc33b1af..6aca901a 100644
--- a/macros/src/codegen/dispatchers.rs
+++ b/macros/src/codegen/dispatchers.rs
@@ -59,7 +59,7 @@ pub fn codegen(app: &App, analysis: &Analysis, _extra: &Extra) -> Vec<TokenStrea
// );
items.push(quote!(
#[doc(hidden)]
- static mut #rq: #rq_ty = #rq_expr;
+ static #rq: rtic::RacyCell<#rq_ty> = rtic::RacyCell::new(#rq_expr);
));
let arms = channel
@@ -86,8 +86,12 @@ pub fn codegen(app: &App, analysis: &Analysis, _extra: &Extra) -> Vec<TokenStrea
#(#cfgs)*
#t::#name => {
let #tupled =
- #inputs.get_unchecked(usize::from(index)).as_ptr().read();
- #fq.split().0.enqueue_unchecked(index);
+ #inputs
+ .get_unchecked()
+ .get_unchecked(usize::from(index))
+ .as_ptr()
+ .read();
+ #fq.get_mut_unchecked().split().0.enqueue_unchecked(index);
let priority = &rtic::export::Priority::new(PRIORITY);
#app_path::#name(
#locals_new
@@ -100,7 +104,7 @@ pub fn codegen(app: &App, analysis: &Analysis, _extra: &Extra) -> Vec<TokenStrea
.collect::<Vec<_>>();
stmts.push(quote!(
- while let Some((task, index)) = #rq.split().1.dequeue() {
+ while let Some((task, index)) = #rq.get_mut_unchecked().split().1.dequeue() {
match task {
#(#arms)*
}