Merge pull request #30501 from neikeq/dispose-godotsharpexport

Mono: Fix null dereference in EditorExportPlatformAndroid
This commit is contained in:
Ignacio Roldán Etcheverry 2019-07-10 22:35:54 +02:00 committed by GitHub
commit 1700ab9bc6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -26,6 +26,8 @@ namespace GodotTools
private MonoDevelopInstance monoDevelopInstance;
private MonoDevelopInstance visualStudioForMacInstance;
private WeakReference<GodotSharpExport> exportPluginWeak;
public MonoBottomPanel MonoBottomPanel { get; private set; }
private bool CreateProjectSolution()
@ -513,11 +515,27 @@ namespace GodotTools
});
// Export plugin
AddExportPlugin(new GodotSharpExport());
var exportPlugin = new GodotSharpExport();
AddExportPlugin(exportPlugin);
exportPluginWeak = new WeakReference<GodotSharpExport>(exportPlugin);
GodotSharpBuilds.Initialize();
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (exportPluginWeak.TryGetTarget(out var exportPlugin))
{
// We need to dispose our export plugin before the editor destroys EditorSettings.
// Otherwise, if the GC disposes it at a later time, EditorExportPlatformAndroid
// will be freed after EditorSettings already was, and its device polling thread
// will try to access the EditorSettings singleton, resulting in null dereferencing.
exportPlugin.Dispose();
}
}
public void OnBeforeSerialize()
{
}