Fix EditorTranslationParser leak

This commit is contained in:
SkyJJ 2020-07-27 16:58:21 +02:00
parent 09a2b77b2d
commit 0e54ba0486
4 changed files with 8 additions and 7 deletions

View file

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

View file

@ -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() { EditorTranslationParser *EditorTranslationParser::get_singleton() {
if (!singleton) { if (!singleton) {
singleton = memnew(EditorTranslationParser); singleton = memnew(EditorTranslationParser);

View file

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

View file

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