瀏覽代碼

Merge pull request #40762 from SkyLucilfer/PackedSceneLeak

Fix EditorTranslationParser leak
Rémi Verschelde 5 年之前
父節點
當前提交
4e825539e5

+ 1 - 0
editor/editor_node.cpp

@@ -6799,6 +6799,7 @@ EditorNode::EditorNode() {
 
 EditorNode::~EditorNode() {
 	EditorInspector::cleanup_plugins();
+	EditorTranslationParser::get_singleton()->clean_parsers();
 
 	remove_print_handler(&print_handler);
 	memdelete(EditorHelp::get_doc_data());

+ 5 - 0
editor/editor_translation_parser.cpp

@@ -147,6 +147,11 @@ void EditorTranslationParser::remove_parser(const Ref<EditorTranslationParserPlu
 	}
 }
 
+void EditorTranslationParser::clean_parsers() {
+	standard_parsers.clear();
+	custom_parsers.clear();
+}
+
 EditorTranslationParser *EditorTranslationParser::get_singleton() {
 	if (!singleton) {
 		singleton = memnew(EditorTranslationParser);

+ 1 - 0
editor/editor_translation_parser.h

@@ -64,6 +64,7 @@ public:
 	Ref<EditorTranslationParserPlugin> get_parser(const String &p_extension) const;
 	void add_parser(const Ref<EditorTranslationParserPlugin> &p_parser, ParserType p_type);
 	void remove_parser(const Ref<EditorTranslationParserPlugin> &p_parser, ParserType p_type);
+	void clean_parsers();
 
 	EditorTranslationParser();
 	~EditorTranslationParser();

+ 1 - 7
modules/gdscript/register_types.cpp

@@ -57,8 +57,6 @@ GDScriptCache *gdscript_cache = nullptr;
 #include "language_server/gdscript_language_server.h"
 #endif // !GDSCRIPT_NO_LSP
 
-Ref<GDScriptEditorTranslationParserPlugin> gdscript_translation_parser_plugin;
-
 class EditorExportGDScript : public EditorExportPlugin {
 	GDCLASS(EditorExportGDScript, EditorExportPlugin);
 
@@ -122,6 +120,7 @@ void register_gdscript_types() {
 #ifdef TOOLS_ENABLED
 	EditorNode::add_init_callback(_editor_init);
 
+	Ref<GDScriptEditorTranslationParserPlugin> gdscript_translation_parser_plugin;
 	gdscript_translation_parser_plugin.instance();
 	EditorTranslationParser::get_singleton()->add_parser(gdscript_translation_parser_plugin, EditorTranslationParser::STANDARD);
 #endif // TOOLS_ENABLED
@@ -143,9 +142,4 @@ void unregister_gdscript_types() {
 
 	ResourceSaver::remove_resource_format_saver(resource_saver_gd);
 	resource_saver_gd.unref();
-
-#ifdef TOOLS_ENABLED
-	EditorTranslationParser::get_singleton()->remove_parser(gdscript_translation_parser_plugin, EditorTranslationParser::STANDARD);
-	gdscript_translation_parser_plugin.unref();
-#endif // TOOLS_ENABLED
 }