chiark / gitweb /
wip always make tokens: refactor nfc
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 5 Dec 2020 15:35:11 +0000 (15:35 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 5 Dec 2020 15:35:11 +0000 (15:35 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/global.rs

index a134d0a517dc202c870ea3366db3d12fa17fb151..cbd431bc9d99b19554f73560f5ab90a5bffb78cf 100644 (file)
@@ -697,8 +697,23 @@ impl<'ig> InstanceGuard<'ig> {
         .latest = now;
       access
     };
-    
+
+    let current_tokens : ArrayVec<[&RawToken;2]> = {
+      let players = GLOBAL.players.read().unwrap();
+      self.tokens_players.tr.iter().
+        filter(|&token| (||{
+          let iad = players.get(token)?;
+          if iad.ident != player { return None }
+          if ! Arc::ptr_eq(&iad.gref.0, &self.gref.0) { return None }
+          Some(())
+        })() == Some(()))
+        .take(2)
+        .collect()
+    };
+
     let token : RawToken = if reset {
+      drop(current_tokens);
+
       self.invalidate_tokens(player)?;
       self.save_access_now()?;
 
@@ -721,20 +736,7 @@ impl<'ig> InstanceGuard<'ig> {
 
     } else {
 
-      let tokens : ArrayVec<[&RawToken;2]> = {
-        let players = GLOBAL.players.read().unwrap();
-        self.tokens_players.tr.iter().
-          filter(|&token| (||{
-            let iad = players.get(token)?;
-            if iad.ident != player { return None }
-            if ! Arc::ptr_eq(&iad.gref.0, &self.gref.0) { return None }
-            Some(())
-          })() == Some(()))
-          .take(2)
-          .collect()
-      };
-
-      let token = match tokens.as_slice() {
+      let token = match current_tokens.as_slice() {
         [] => throw!(ME::AuthorisationUninitialised),
         [token] => token,
         _ => {