summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <github@jplamondonw.com>2017-04-23 23:00:13 -0400
committerJesse Plamondon-Willard <github@jplamondonw.com>2017-04-23 23:00:13 -0400
commit8ec607ba3c1d672f5aeac065dd19dc3514e209c4 (patch)
tree74fe3f7c6a27a57b254d49540b4966c1a32d67c5
parent07197fac9dbea84565f6004029b15667c9c2b038 (diff)
downloadSMAPI-8ec607ba3c1d672f5aeac065dd19dc3514e209c4.tar.gz
SMAPI-8ec607ba3c1d672f5aeac065dd19dc3514e209c4.tar.bz2
SMAPI-8ec607ba3c1d672f5aeac065dd19dc3514e209c4.zip
ensure SMAPI resources are disposed on exit (#268)
-rw-r--r--release-notes.md3
-rw-r--r--src/StardewModdingAPI/Program.cs17
2 files changed, 15 insertions, 5 deletions
diff --git a/release-notes.md b/release-notes.md
index 9227d4b3..bc2c90b8 100644
--- a/release-notes.md
+++ b/release-notes.md
@@ -16,7 +16,8 @@ See [log](https://github.com/Pathoschild/SMAPI/compare/1.9...1.10).
For players:
* Added support for Stardew Valley 1.2 beta.
* Added logic to rewrite many mods for compatibility with game updates, though some mods may still need an update.
-* Fixed some players getting `SEHException` errors.
+* Fixed `SEHException` errors affecting some players.
+* Fixed issue where SMAPI didn't unlock some files on exit.
* Fixed rare issue where the installer would crash trying to delete a bundled mod from `%appdata%`.
* Improved TrainerMod commands:
* Added `world_setyear` to change the current year.
diff --git a/src/StardewModdingAPI/Program.cs b/src/StardewModdingAPI/Program.cs
index 3bd91a7c..5cf80448 100644
--- a/src/StardewModdingAPI/Program.cs
+++ b/src/StardewModdingAPI/Program.cs
@@ -22,7 +22,7 @@ using Monitor = StardewModdingAPI.Framework.Monitor;
namespace StardewModdingAPI
{
/// <summary>The main entry point for SMAPI, responsible for hooking into and launching the game.</summary>
- internal class Program
+ internal class Program : IDisposable
{
/*********
** Properties
@@ -87,8 +87,8 @@ namespace StardewModdingAPI
logPath = Constants.DefaultLogPath;
// load SMAPI
- new Program(writeToConsole, logPath)
- .LaunchInteractively();
+ using (Program program = new Program(writeToConsole, logPath))
+ program.RunInteractively();
}
/// <summary>Construct an instance.</summary>
@@ -101,7 +101,7 @@ namespace StardewModdingAPI
}
/// <summary>Launch SMAPI.</summary>
- public void LaunchInteractively()
+ public void RunInteractively()
{
// initialise SMAPI
try
@@ -204,6 +204,15 @@ namespace StardewModdingAPI
return this.GetSecondaryMonitor(modName);
}
+ /// <summary>Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.</summary>
+ public void Dispose()
+ {
+ this.LogFile?.Dispose();
+ this.ConsoleManager?.Dispose();
+ this.CancellationTokenSource?.Dispose();
+ this.GameInstance?.Dispose();
+ }
+
/*********
** Private methods