let (entry, acctid) = self.lookup_mut_caller_must_save(key, auth)?;
if let Some(new_access) = set_access {
- process_all_players_for_account(acctid,
- InstanceGuard::invalidate_tokens)?;
+ process_all_players_for_account(
+ acctid,
+ |ig, player| ig.invalidate_tokens(player)
+ )?;
entry.access = AccessRecord(new_access);
}
let output = f(&mut *entry, acctid);
#[throws(E)]
pub fn process_all_players_for_account<
- 'i, 'j : 'i,
E: Error,
- F: FnMut(&'i mut InstanceGuard<'j>, PlayerId) -> Result<(),E>
+ F: FnMut(&mut InstanceGuard<'_>, PlayerId) -> Result<(),E>
>
- (acctid: AccountId, f: F)
+ (acctid: AccountId, mut f: F)
{
let games = GLOBAL.games.write().unwrap();
for gref in games.values() {
let remove : Vec<_> = c.g.iplayers.iter().filter_map(|(player,pr)| {
if pr.ipl.acctid == acctid { Some(player) } else { None }
}).collect();
- let ig = InstanceGuard { gref: gref.clone(), c };
- for player in remove.drain(..) {
+ let mut ig = InstanceGuard { gref: gref.clone(), c };
+ for player in remove.into_iter() {
f(&mut ig, player)?;
}
}