From 93024406131f435a690a85dbc9987cbe83c036e8 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Wed, 5 May 2010 18:15:48 +1200 Subject: [PATCH] dispose the previous ordermanager (so the file will get closed, among other things) --- OpenRA.Game/Game.cs | 4 ++++ OpenRA.Game/Network/OrderManager.cs | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index ab2eb3c567..53d05ed2e7 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -170,8 +170,11 @@ namespace OpenRA internal static void JoinServer(string host, int port) { + if (orderManager != null) orderManager.Dispose(); + CurrentHost = host; CurrentPort = port; + orderManager = new OrderManager(new NetworkConnection( host, port ), ChooseReplayFilename()); } @@ -182,6 +185,7 @@ namespace OpenRA internal static void JoinLocal() { + if (orderManager != null) orderManager.Dispose(); orderManager = new OrderManager(new EchoConnection()); } diff --git a/OpenRA.Game/Network/OrderManager.cs b/OpenRA.Game/Network/OrderManager.cs index a3e0397139..6b1e5abde3 100755 --- a/OpenRA.Game/Network/OrderManager.cs +++ b/OpenRA.Game/Network/OrderManager.cs @@ -26,7 +26,7 @@ using OpenRA.FileFormats; namespace OpenRA.Network { - class OrderManager + class OrderManager : IDisposable { public int FrameNumber { get; private set; } @@ -233,5 +233,19 @@ namespace OpenRA.Network replaySaveFile.Write( i.Second ); } } + + bool disposed; + public void Dispose() + { + if (disposed) return; + + if (replaySaveFile != null) + replaySaveFile.Dispose(); + + disposed = true; + GC.SuppressFinalize(this); + } + + ~OrderManager() { Dispose(); } } }