Resolve a small race condition on removing bot behaviours that might leave previous behaviour active

Also closes behaviours on disconnect instead of interrupt, though this makes no practical difference.
If existing behaviour is None, other added behavious will not take affect until None is removed (as this is an infinite wait until interrupted).
0.8-extended
Justin Clark-Casey (justincc) 2014-08-15 22:41:00 +01:00 committed by Justin Clark-Casey
parent 72be9eaa8b
commit 940c79a66d
1 changed files with 3 additions and 2 deletions

View File

@ -214,10 +214,11 @@ namespace pCampBot
if (!updatedBehaviours.TryGetValue(abbreviatedName, out behaviour)) if (!updatedBehaviours.TryGetValue(abbreviatedName, out behaviour))
return false; return false;
behaviour.Close();
updatedBehaviours.Remove(abbreviatedName); updatedBehaviours.Remove(abbreviatedName);
Behaviours = updatedBehaviours; Behaviours = updatedBehaviours;
behaviour.Close();
return true; return true;
} }
@ -299,7 +300,7 @@ namespace pCampBot
ConnectionState = ConnectionState.Disconnecting; ConnectionState = ConnectionState.Disconnecting;
foreach (IBehaviour behaviour in Behaviours.Values) foreach (IBehaviour behaviour in Behaviours.Values)
behaviour.Interrupt(); behaviour.Close();
Client.Network.Logout(); Client.Network.Logout();
} }