diff --git a/src/GameLogic/MiniGames/HeykelSavasiContext.cs b/src/GameLogic/MiniGames/HeykelSavasiContext.cs index 3d88f4f..a1cb137 100644 --- a/src/GameLogic/MiniGames/HeykelSavasiContext.cs +++ b/src/GameLogic/MiniGames/HeykelSavasiContext.cs @@ -160,19 +160,26 @@ public class HeykelSavasiContext : MiniGameContext return false; } - var enterResult = await this.TryEnterAsync(player).ConfigureAwait(false); - if (enterResult != EnterResult.Success) + var success = false; + try { - lock (this._teamLock) + var enterResult = await this.TryEnterAsync(player).ConfigureAwait(false); + success = enterResult == EnterResult.Success; + } + finally + { + if (!success) { - // Roll back the reservation; the player never actually entered the mini game. - this.RemoveTeam(player); + lock (this._teamLock) + { + // Roll back the reservation; the player never actually entered the mini game + // (or TryEnterAsync threw, e.g. due to a disconnect/disposal race). + this.RemoveTeam(player); + } } - - return false; } - return true; + return success; } ///