aboutsummaryrefslogtreecommitdiff
path: root/macros/src/syntax/analyze.rs
diff options
context:
space:
mode:
authorGravatar Emil Fresk <emil.fresk@gmail.com> 2023-01-08 21:10:06 +0100
committerGravatar Henrik Tjäder <henrik@tjaders.com> 2023-03-01 00:33:28 +0100
commit6d252785e83218eeb5d080836281c90b86ca0e03 (patch)
tree7220026f04871b30fa01d3ddddd5d40c87f89f8b /macros/src/syntax/analyze.rs
parent35c97b61c17a30de675eb1c7f852a100b200a0c2 (diff)
downloadrtic-6d252785e83218eeb5d080836281c90b86ca0e03.tar.gz
rtic-6d252785e83218eeb5d080836281c90b86ca0e03.tar.zst
rtic-6d252785e83218eeb5d080836281c90b86ca0e03.zip
Support 0 prio tasks
Diffstat (limited to 'macros/src/syntax/analyze.rs')
-rw-r--r--macros/src/syntax/analyze.rs33
1 files changed, 17 insertions, 16 deletions
diff --git a/macros/src/syntax/analyze.rs b/macros/src/syntax/analyze.rs
index dd5a9b40..b70ceb8b 100644
--- a/macros/src/syntax/analyze.rs
+++ b/macros/src/syntax/analyze.rs
@@ -248,33 +248,34 @@ pub(crate) fn app(app: &App) -> Result<Analysis, syn::Error> {
}
}
- // Most shared resources need to be `Send`
+ // Most shared resources need to be `Send`, only 0 prio does not need it
let mut send_types = SendTypes::new();
- let owned_by_idle = Ownership::Owned { priority: 0 };
+
for (name, res) in app.shared_resources.iter() {
- // Handle not owned by idle
if ownerships
.get(name)
- .map(|ownership| *ownership != owned_by_idle)
+ .map(|ownership| match *ownership {
+ Ownership::Owned { priority: ceiling }
+ | Ownership::CoOwned { priority: ceiling }
+ | Ownership::Contended { ceiling } => ceiling != 0,
+ })
.unwrap_or(false)
{
send_types.insert(res.ty.clone());
}
}
- // Most local resources need to be `Send` as well
+ // Most local resources need to be `Send` as well, only 0 prio does not need it
for (name, res) in app.local_resources.iter() {
- if let Some(idle) = &app.idle {
- // Only Send if not in idle or not at idle prio
- if idle.args.local_resources.get(name).is_none()
- && !ownerships
- .get(name)
- .map(|ownership| *ownership != owned_by_idle)
- .unwrap_or(false)
- {
- send_types.insert(res.ty.clone());
- }
- } else {
+ if ownerships
+ .get(name)
+ .map(|ownership| match *ownership {
+ Ownership::Owned { priority: ceiling }
+ | Ownership::CoOwned { priority: ceiling }
+ | Ownership::Contended { ceiling } => ceiling != 0,
+ })
+ .unwrap_or(false)
+ {
send_types.insert(res.ty.clone());
}
}