godotengine / godot

Godot Engine – Multi-platform 2D and 3D game engine
https://godotengine.org
MIT License
91.22k stars 21.22k forks source link

Can't open project after deleting .godot folder #87593

Closed KoBeWi closed 8 months ago

KoBeWi commented 9 months ago

Tested versions

4.3 dev2 4.3 5034478 Works correctly in 4.2.1

System information

Windows 10.0.19045 - Vulkan (Forward+) - dedicated NVIDIA GeForce GTX 1060 (NVIDIA; 30.0.15.1403) - Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz (8 Threads)

Issue description

I had some script errors due to deleted scripts, so I deleted script cache, but my project could no longer run. So I decided to delete the whole .godot folder and I can't open the project anymore. The RAM usage skyrockets to over 8GB and then either editor dies or the system freezes and then editor dies.

There is nothing useful in the output, even in verbose mode.

Steps to reproduce

  1. Open my project in Godot 4.3.
  2. Wait until it loads.
  3. 💀

Minimal reproduction project (MRP)

I can share the project privately. It does not happen in a minimal one and I don't know which part causes the problem.

YuriSizov commented 9 months ago

What if you open it in a new self-contained instance of the editor? Sounds like another deadlock though.

PS. If it's a deadlock, you can manually pause the debugger pretty much at any point and it's likely to stop around the code that is locked.

KoBeWi commented 9 months ago

Seems like it worked in a self-contained mode 🤔 Which probably means that the bug can't be reproduced reliably even with the same project 🙄

akien-mga commented 9 months ago

inb4 it's EditorResourcePreview deadlocking while trying to generate a preview for GDScripts with unresolved class names or circular deps..

I think we should get rid of GDScript previews, or at least of the highlighting part that requires loading/parsing.

KoBeWi commented 9 months ago

I used debugger to see what is it doing in the background and seems like it's loading random scenes across the project. It's not stuck on a single one, but the memory usage steadily increases.

EDIT: Seems like it hangs when loading TileSet, idk.

KoBeWi commented 8 months ago

Apparently the culprit is 958699a0c42320c5266540278a4c967ee6476623 After removing these two lines https://github.com/godotengine/godot/blob/da945ce6266ce27ba63b6b08dc0eb2414594f7cb/editor/editor_file_system.cpp#L1687-L1688 the project opens normally. It's only a problem if group cache does not exist.

CC @DarkMessiah

KoBeWi commented 8 months ago

I found more info and I was right that it's related to TileSet.

[repeats million times]
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
EditorNode::_print_handler(void * p_this, const String & p_string, bool p_error, bool p_rich) Line 6125 (c:\godot_source\editor\editor_node.cpp:6125)
__print_line(const String & p_string) Line 82 (c:\godot_source\core\string\print_string.cpp:82)
print_line(const Variant & v) Line 73 (c:\godot_source\core\string\print_string.h:73)
CallQueue::statistics() Line 466 (c:\godot_source\core\object\message_queue.cpp:466)
CallQueue::push_callablep(const Callable & p_callable, const Variant * * p_args, int p_argcount, bool p_show_error) Line 100 (c:\godot_source\core\object\message_queue.cpp:100)
Callable::call_deferredp(const Variant * * p_arguments, int p_argcount) Line 41 (c:\godot_source\core\variant\callable.cpp:41)
Callable::call_deferred<>() Line 85 (c:\godot_source\core\variant\callable.h:85)
TileSetAtlasSource::_queue_update_padded_texture() Line 5573 (c:\godot_source\scene\resources\2d\tile_set.cpp:5573)
TileSetAtlasSource::create_tile(const Vector2i p_atlas_coords, const Vector2i p_size) Line 4984 (c:\godot_source\scene\resources\2d\tile_set.cpp:4984)
TileSetAtlasSource::_set(const StringName & p_name, const Variant & p_value) Line 4746 (c:\godot_source\scene\resources\2d\tile_set.cpp:4746)
TileSetAtlasSource::_setv(const StringName & p_name, const Variant & p_property) Line 607 (c:\godot_source\scene\resources\2d\tile_set.h:607)
Object::set(const StringName & p_name, const Variant & p_value, bool * r_valid) Line 302 (c:\godot_source\core\object\object.cpp:302)
ResourceLoaderBinary::load() Line 838 (c:\godot_source\core\io\resource_format_binary.cpp:838)
ResourceFormatLoaderBinary::load(const String & p_path, const String & p_original_path, Error * r_error, bool p_use_sub_threads, float * r_progress, ResourceFormatLoader::CacheMode p_cache_mode) Line 1215 (c:\godot_source\core\io\resource_format_binary.cpp:1215)
ResourceLoader::_load(const String & p_path, const String & p_original_path, const String & p_type_hint, ResourceFormatLoader::CacheMode p_cache_mode, Error * r_error, bool p_use_sub_threads, float * r_progress) Line 264 (c:\godot_source\core\io\resource_loader.cpp:264)
ResourceLoader::_thread_load_function(void * p_userdata) Line 322 (c:\godot_source\core\io\resource_loader.cpp:322)
ResourceLoader::_load_start(const String & p_path, const String & p_type_hint, ResourceLoader::LoadThreadMode p_thread_mode, ResourceFormatLoader::CacheMode p_cache_mode) Line 525 (c:\godot_source\core\io\resource_loader.cpp:525)
ResourceLoaderText::load() Line 474 (c:\godot_source\scene\resources\resource_format_text.cpp:474)
ResourceFormatLoaderText::load(const String & p_path, const String & p_original_path, Error * r_error, bool p_use_sub_threads, float * r_progress, ResourceFormatLoader::CacheMode p_cache_mode) Line 1681 (c:\godot_source\scene\resources\resource_format_text.cpp:1681)
ResourceLoader::_load(const String & p_path, const String & p_original_path, const String & p_type_hint, ResourceFormatLoader::CacheMode p_cache_mode, Error * r_error, bool p_use_sub_threads, float * r_progress) Line 264 (c:\godot_source\core\io\resource_loader.cpp:264)
ResourceLoader::_thread_load_function(void * p_userdata) Line 322 (c:\godot_source\core\io\resource_loader.cpp:322)
ResourceLoader::_load_start(const String & p_path, const String & p_type_hint, ResourceLoader::LoadThreadMode p_thread_mode, ResourceFormatLoader::CacheMode p_cache_mode) Line 525 (c:\godot_source\core\io\resource_loader.cpp:525)
ResourceLoader::load(const String & p_path, const String & p_type_hint, ResourceFormatLoader::CacheMode p_cache_mode, Error * r_error) Line 442 (c:\godot_source\core\io\resource_loader.cpp:442)
EditorFileSystem::_get_scene_groups(const String & p_path) Line 1713 (c:\godot_source\editor\editor_file_system.cpp:1713)
EditorFileSystem::_update_scene_groups() Line 1674 (c:\godot_source\editor\editor_file_system.cpp:1674)
EditorFileSystem::_update_pending_scene_groups() Line 1688 (c:\godot_source\editor\editor_file_system.cpp:1688)
EditorFileSystem::_notification(int p_what) Line 1301 (c:\godot_source\editor\editor_file_system.cpp:1301)
EditorFileSystem::_notificationv(int p_notification, bool p_reversed) Line 146 (c:\godot_source\editor\editor_file_system.h:146)
Object::notification(int p_notification, bool p_reversed) Line 902 (c:\godot_source\core\object\object.cpp:902)
SceneTree::_process_group(SceneTree::ProcessGroup * p_group, bool p_physics) Line 958 (c:\godot_source\scene\main\scene_tree.cpp:958)
SceneTree::_process(bool p_physics) Line 1035 (c:\godot_source\scene\main\scene_tree.cpp:1035)
SceneTree::process(double p_time) Line 512 (c:\godot_source\scene\main\scene_tree.cpp:512)
Main::iteration() Line 4015 (c:\godot_source\main\main.cpp:4015)
OS_Windows::run() Line 1476 (c:\godot_source\platform\windows\os_windows.cpp:1476)
widechar_main(int argc, wchar_t * * argv) Line 182 (c:\godot_source\platform\windows\godot_windows.cpp:182)
_main() Line 204 (c:\godot_source\platform\windows\godot_windows.cpp:204)
main(int argc, char * * argv) Line 218 (c:\godot_source\platform\windows\godot_windows.cpp:218)
WinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, char * lpCmdLine, int nCmdShow) Line 232 (c:\godot_source\platform\windows\godot_windows.cpp:232)
[Inline Frame] invoke_main() Line 102 (d:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:102)
__scrt_common_main_seh() Line 288 (d:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288)
kernel32.dll!00007ff916067344() (Nieznane źródło:0)
ntdll.dll!00007ff9166226b1() (Nieznane źródło:0)

First, the reason why it hangs itself in the first place: when you load a TileSet, it does a call_deferred() to _update_padded_texture. Since the scene is freed after scanning, the TileSet is loaded for every scene and queues the texture update every time (even if the object that waits for the update is gone...). Scene scanning happens in a single frame, so the queue is never flushed, which means that after enough scenes are loaded, the TileSet updates will clog it up, which causes queue error to print and calls statistics() function.

I assume what happens next is that statistics() tries to access the already deleted resource and goes here: https://github.com/godotengine/godot/blob/da945ce6266ce27ba63b6b08dc0eb2414594f7cb/core/object/message_queue.cpp#L464-L469 And print_line() is deferred :D Which means that it will try to use already full queue and recursively call the same function until everything dies.

There are 2 separate solutions to apply here:

Also since group scanning is so long, it should use EditorProgress and possibly happen over a few frames, to avoid clogging message queue.

EDIT: Another thing I just realized is that TileSet will do _update_padded_texture() for every single tile...

AThousandShips commented 8 months ago

remove print_line() from statistics() to avoid recursively destroying the message queue

This was done elsewhere, so makes sense here too, will open a PR for that

KoBeWi commented 8 months ago

89493 prevents TileSet from exploding memory usage and #89490 prevents crashing if it still happens for some reason, so this issue is resolved (the project can be opened).

Remaining problems mentioned here: