From dee2fcde716a2dbb1404caa4e0f8f4ce11c472c8 Mon Sep 17 00:00:00 2001
From: Jorge Aparicio <jorge@japaric.io>
Date: Wed, 26 Jul 2017 19:30:47 -0500
Subject: [PATCH] provide a Threshold token even when all resources are
 lockless

because the token will always be required for calling generic functions
---
 macros/src/trans.rs | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/macros/src/trans.rs b/macros/src/trans.rs
index 6554dc9..a137e0e 100644
--- a/macros/src/trans.rs
+++ b/macros/src/trans.rs
@@ -59,12 +59,7 @@ fn idle(
     let mut tys = vec![];
     let mut exprs = vec![];
 
-    if !app.idle.resources.is_empty() &&
-        !app.idle
-            .resources
-            .iter()
-            .all(|resource| ownerships[resource].is_owned())
-    {
+    if !app.idle.resources.is_empty() {
         tys.push(quote!(&mut #krate::Threshold));
         exprs.push(quote!(unsafe { &mut #krate::Threshold::new(0) }));
     }
@@ -508,6 +503,8 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) {
         let has_resources = !task.resources.is_empty();
 
         if has_resources {
+            needs_threshold = !task.resources.is_empty();
+
             for name in &task.resources {
                 let _name = Ident::new(format!("_{}", name.as_ref()));
 
@@ -606,7 +603,8 @@ fn tasks(app: &App, ownerships: &Ownerships, root: &mut Vec<Tokens>) {
             }
 
             let _name = Ident::new(format!("_{}", name));
-            let export_name = Lit::Str(name.as_ref().to_owned(), StrStyle::Cooked);
+            let export_name =
+                Lit::Str(name.as_ref().to_owned(), StrStyle::Cooked);
             root.push(quote! {
                 #[allow(non_snake_case)]
                 #[allow(unsafe_code)]
-- 
GitLab