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 monoDevelopInstance;
private MonoDevelopInstance visualStudioForMacInstance; private MonoDevelopInstance visualStudioForMacInstance;
private WeakReference<GodotSharpExport> exportPluginWeak;
public MonoBottomPanel MonoBottomPanel { get; private set; } public MonoBottomPanel MonoBottomPanel { get; private set; }
private bool CreateProjectSolution() private bool CreateProjectSolution()
@ -513,11 +515,27 @@ namespace GodotTools
}); });
// Export plugin // Export plugin
AddExportPlugin(new GodotSharpExport()); var exportPlugin = new GodotSharpExport();
AddExportPlugin(exportPlugin);
exportPluginWeak = new WeakReference<GodotSharpExport>(exportPlugin);
GodotSharpBuilds.Initialize(); 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() public void OnBeforeSerialize()
{ {
} }