From 13978b08bc9d4e48023b8f1e9d4b2683d43dddd9 Mon Sep 17 00:00:00 2001 From: Pavel Penev Date: Sun, 15 Nov 2015 18:48:54 +0200 Subject: [PATCH] Fix UpgradeActorsNear revoking upgrades after the actor dies Very hard bug to reproduce: if you can power down a stealth generator just as it is dieing you can hit a race condition that leads to ActorExited() being called to revoke the upgrades after they have already been revoked once. --- OpenRA.Mods.Common/Traits/Upgrades/UpgradeActorsNear.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Upgrades/UpgradeActorsNear.cs b/OpenRA.Mods.Common/Traits/Upgrades/UpgradeActorsNear.cs index c649547574..59d67039be 100644 --- a/OpenRA.Mods.Common/Traits/Upgrades/UpgradeActorsNear.cs +++ b/OpenRA.Mods.Common/Traits/Upgrades/UpgradeActorsNear.cs @@ -88,7 +88,7 @@ namespace OpenRA.Mods.Common.Traits void ActorEntered(Actor a) { - if (a.Disposed) + if (a.Disposed || self.Disposed) return; if (a == self && !info.AffectsParent) @@ -123,7 +123,7 @@ namespace OpenRA.Mods.Common.Traits void ActorExited(Actor a) { - if (a == self || a.Disposed) + if (a == self || a.Disposed || self.Disposed) return; var stance = self.Owner.Stances[a.Owner];