[godot] Try to fix ObjectDB segfault on editor shutdown.

This commit is contained in:
badlogic 2022-06-02 15:40:39 +02:00
parent e7f0455487
commit 39eb65fc55

View File

@ -53,10 +53,10 @@
#include "SpineBoneNode.h" #include "SpineBoneNode.h"
#include "spine/Bone.h" #include "spine/Bone.h"
static Ref<SpineAtlasResourceFormatLoader> atlas_loader; static SpineAtlasResourceFormatLoader *atlas_loader;
static Ref<SpineAtlasResourceFormatSaver> atlas_saver; static SpineAtlasResourceFormatSaver *atlas_saver;
static Ref<SpineSkeletonFileResourceFormatLoader> skeleton_file_loader; static SpineSkeletonFileResourceFormatLoader *skeleton_file_loader;
static Ref<SpineSkeletonFileResourceFormatSaver> skeleton_file_saver; static SpineSkeletonFileResourceFormatSaver *skeleton_file_saver;
#ifdef TOOLS_ENABLED #ifdef TOOLS_ENABLED
#include "editor/editor_node.h" #include "editor/editor_node.h"
@ -112,28 +112,28 @@ void register_spine_godot_types() {
GDREGISTER_CLASS(SpineAnimationTrack); GDREGISTER_CLASS(SpineAnimationTrack);
#if VERSION_MAJOR > 3 #if VERSION_MAJOR > 3
atlas_loader.instantiate(); atlas_loader = memnew(SpineAtlasResourceFormatLoader);
ResourceLoader::add_resource_format_loader(atlas_loader); ResourceLoader::add_resource_format_loader(atlas_loader);
atlas_saver.instantiate(); atlas_saver = memnew(SpineAtlasResourceFormatSaver);
ResourceSaver::add_resource_format_saver(atlas_saver); ResourceSaver::add_resource_format_saver(atlas_saver);
skeleton_file_loader.instantiate(); skeleton_file_loader = memnew(SpineSkeletonFileResourceFormatLoader);
ResourceLoader::add_resource_format_loader(skeleton_file_loader); ResourceLoader::add_resource_format_loader(skeleton_file_loader);
skeleton_file_saver.instantiate(); skeleton_file_saver = memnew(SpineSkeletonFileResourceFormatSaver);
ResourceSaver::add_resource_format_saver(skeleton_file_saver); ResourceSaver::add_resource_format_saver(skeleton_file_saver);
#else #else
atlas_loader.instance(); atlas_loader = memnew(SpineAtlasResourceFormatLoader);
ResourceLoader::add_resource_format_loader(atlas_loader); ResourceLoader::add_resource_format_loader(atlas_loader);
atlas_saver.instance(); atlas_saver = memnew(SpineAtlasResourceFormatSaver);
ResourceSaver::add_resource_format_saver(atlas_saver); ResourceSaver::add_resource_format_saver(atlas_saver);
skeleton_file_loader.instance(); skeleton_file_loader = memnew(SpineSkeletonFileResourceFormatLoader);
ResourceLoader::add_resource_format_loader(skeleton_file_loader); ResourceLoader::add_resource_format_loader(skeleton_file_loader);
skeleton_file_saver.instance(); skeleton_file_saver = memnew(SpineSkeletonFileResourceFormatSaver);
ResourceSaver::add_resource_format_saver(skeleton_file_saver); ResourceSaver::add_resource_format_saver(skeleton_file_saver);
#endif #endif
} }
@ -144,14 +144,12 @@ void uninitialize_spine_godot_module(ModuleInitializationLevel level) {
void unregister_spine_godot_types() { void unregister_spine_godot_types() {
#endif #endif
ResourceLoader::remove_resource_format_loader(atlas_loader); ResourceLoader::remove_resource_format_loader(atlas_loader);
atlas_loader.unref();
ResourceSaver::remove_resource_format_saver(atlas_saver); ResourceSaver::remove_resource_format_saver(atlas_saver);
atlas_saver.unref();
ResourceLoader::remove_resource_format_loader(skeleton_file_loader); ResourceLoader::remove_resource_format_loader(skeleton_file_loader);
skeleton_file_loader.unref();
ResourceSaver::remove_resource_format_saver(skeleton_file_saver); ResourceSaver::remove_resource_format_saver(skeleton_file_saver);
skeleton_file_saver.unref();
memdelete(atlas_loader);
memdelete(atlas_saver);
memdelete(skeleton_file_saver);
memdelete(skeleton_file_loader);
} }