Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
KoBeWi opened this issue Jan 25, 2024 · 8 comments
Closed

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

KoBeWi opened this issue Jan 25, 2024 · 8 comments

Comments

@KoBeWi
Copy link
Member

KoBeWi commented Jan 25, 2024

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
Copy link
Contributor

YuriSizov commented Jan 25, 2024

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.

@YuriSizov YuriSizov moved this from Unassessed to Very Bad in 4.x Release Blockers Jan 25, 2024
@KoBeWi
Copy link
Member Author

KoBeWi commented Jan 25, 2024

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
Copy link
Member

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
Copy link
Member Author

KoBeWi commented Jan 25, 2024

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
Copy link
Member Author

KoBeWi commented Mar 14, 2024

Apparently the culprit is 958699a
After removing these two lines

_get_all_scenes(get_filesystem(), update_scene_paths);
_update_scene_groups();

the project opens normally. It's only a problem if group cache does not exist.

CC @DarkMessiah

@KoBeWi
Copy link
Member Author

KoBeWi commented Mar 14, 2024

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:

if (null_target) {
//object was deleted
print_line("Object was deleted while awaiting a callback");
null_count++;
}

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:

  • don't do deferred call when loading TileSet (idk how it can be avoided)
  • remove print_line() from statistics() to avoid recursively destroying the message queue

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
Copy link
Member

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
Copy link
Member Author

KoBeWi commented Mar 15, 2024

#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:

  • TileSet filling call queue while being loaded repeatedly. This is only specific to group loading (and possibly other scene mass-load code). Normally the TileSet is used after being loaded, so it's fine like this if it's not easily fixable
  • Global group caching takes loooooooong time and the editor is unresponsive at that time. I'll open a separate issue. This only affects projects that are very big and don't have cache yet EDIT: Caching scene groups can take a long time while the editor is unresponsive #89516

@KoBeWi KoBeWi closed this as completed Mar 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Very Bad
Development

No branches or pull requests

4 participants