Fix restart error (#10591)

This commit is contained in:
Leon Friedrich
2022-08-15 07:54:11 +12:00
committed by GitHub
parent d08b84c002
commit c535214aa2
2 changed files with 12 additions and 1 deletions

View File

@@ -31,6 +31,7 @@ using Robust.Shared.ContentPack;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Robust.Shared.Timing; using Robust.Shared.Timing;
using Robust.Shared.Utility; using Robust.Shared.Utility;
using Content.Server.Station.Systems;
namespace Content.Server.Entry namespace Content.Server.Entry
{ {
@@ -160,6 +161,7 @@ namespace Content.Server.Entry
protected override void Dispose(bool disposing) protected override void Dispose(bool disposing)
{ {
_playTimeTracking?.Shutdown(); _playTimeTracking?.Shutdown();
IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<StationSystem>().OnServerDispose();
} }
} }
} }

View File

@@ -75,6 +75,14 @@ public sealed class StationSystem : EntitySystem
_player.PlayerStatusChanged -= OnPlayerStatusChanged; _player.PlayerStatusChanged -= OnPlayerStatusChanged;
} }
/// <summary>
/// Called when the server shuts down or restarts to avoid uneccesarily logging mid-round station deletion errors.
/// </summary>
public void OnServerDispose()
{
_stations.Clear();
}
private void OnPlayerStatusChanged(object? sender, SessionStatusEventArgs e) private void OnPlayerStatusChanged(object? sender, SessionStatusEventArgs e)
{ {
if (e.NewStatus == SessionStatus.Connected) if (e.NewStatus == SessionStatus.Connected)
@@ -97,7 +105,8 @@ public sealed class StationSystem : EntitySystem
if (_stations.Contains(uid) && // Was not deleted via DeleteStation() if (_stations.Contains(uid) && // Was not deleted via DeleteStation()
_gameTicker.RunLevel == GameRunLevel.InRound) // And not due to a round restart _gameTicker.RunLevel == GameRunLevel.InRound) // And not due to a round restart
{ {
throw new InvalidOperationException($"Station entity {ToPrettyString(uid)} is getting deleted mid-round."); // printing a stack trace, rather than throwing an exception so that entity deletion continues as normal.
Logger.Error($"Station entity {ToPrettyString(uid)} is getting deleted mid-round. Trace: {Environment.StackTrace}");
} }
_stations.Remove(uid); _stations.Remove(uid);