refactor: move dispose logic out of entrypoint

This commit is contained in:
goat 2021-04-26 20:06:30 +02:00
parent 8976bfec3f
commit b7fd154b91
No known key found for this signature in database
GPG key ID: F18F057873895461
2 changed files with 10 additions and 5 deletions

View file

@ -31,6 +31,8 @@ namespace Dalamud
private readonly string baseDirectory;
private bool hasDisposedPlugins = false;
#endregion
/// <summary>
@ -351,8 +353,13 @@ namespace Dalamud
this.finishUnloadSignal?.WaitOne();
}
/// <summary>
/// Dispose subsystems related to plugin handling.
/// </summary>
public void DisposePlugins()
{
this.hasDisposedPlugins = true;
// this must be done before unloading plugins, or it can cause a race condition
// due to rendering happening on another thread, where a plugin might receive
// a render call after it has been disposed, which can crash if it attempts to
@ -378,6 +385,9 @@ namespace Dalamud
{
try
{
if (!this.hasDisposedPlugins)
this.DisposePlugins();
this.Framework?.Dispose();
this.ClientState?.Dispose();

View file

@ -59,11 +59,6 @@ namespace Dalamud
// Run session
dalamud.Start();
dalamud.WaitForUnload();
if (dalamud.Framework.DispatchUpdateEvents)
{
dalamud.DisposePlugins();
Thread.Sleep(100);
}
dalamud.Dispose();
}