godot: DynamicFont causing Game Crash

Godot version: 8e82404

OS/device including version: Toaster running Mint

Issue description: get_tree().change_scene(path) causes game crash when I use a dynamic font as part of my scene in some cases. I’m not sure why it is crashing, and have not been able to create demo project to reproduce yet, but seems like it is a DynamicFont issue. What happens: my main menu is loaded at game startup. Everything is fine. I am able to navigate through a level select screen that uses DynamicFont, play a level. Crash happens when returning from level to main menu.

handle_crash: Program crashed with signal 11 Dumping the backtrace. Please include this when reporting the bug on https://github.com/godotengine/godot/issues [1] /lib/x86_64-linux-gnu/libc.so.6(+0x354b0) [0x7fded8e4f4b0] (??:0) [2] Reference::reference() (GODOTPATH/godot/core/reference.cpp:70) [3] Reference::init_ref() (GODOTPATH/godot/core/reference.cpp:37) [4] Ref<DynamicFontAtSize>::ref_pointer(DynamicFontAtSize*) (GODOTPATH/godot/core/reference.h:84 (discriminator 2)) [5] Ref<DynamicFontAtSize>::Ref(DynamicFontAtSize*) (GODOTPATH/godot/core/reference.h:220) [6] DynamicFontData::_get_dynamic_font_at_size(DynamicFontData::CacheID) (GODOTPATH/godot/scene/resources/dynamic_font.cpp:50) [7] DynamicFont::set_font_data(Ref<DynamicFontData> const&) (GODOTPATH/godot/scene/resources/dynamic_font.cpp:678) [8] MethodBind1<Ref<DynamicFontData> const&>::call(Object*, Variant const**, int, Variant::CallError&) (GODOTPATH/godot/core/method_bind.gen.inc:729 (discriminator 12)) [9] ClassDB::set_property(Object*, StringName const&, Variant const&, bool*) (GODOTPATH/godot/core/class_db.cpp:989) [10] Object::set(StringName const&, Variant const&, bool*) (GODOTPATH/godot/core/object.cpp:422) [11] ResourceInteractiveLoaderText::poll() (GODOTPATH/godot/scene/resources/scene_format_text.cpp:529 (discriminator 3)) [12] ResourceFormatLoader::load(String const&, String const&, Error*) (GODOTPATH/godot/core/io/resource_loader.cpp:138) [13] ResourceLoader::_load(String const&, String const&, String const&, bool, Error*) (GODOTPATH/godot/core/io/resource_loader.cpp:173 (discriminator 7)) [14] ResourceLoader::load(String const&, String const&, bool, Error*) (GODOTPATH/godot/core/io/resource_loader.cpp:219) [15] SceneTree::change_scene(String const&) (GODOTPATH/godot/scene/main/scene_tree.cpp:1233 (discriminator 2)) [16] MethodBind1R<Error, String const&>::call(Object*, Variant const**, int, Variant::CallError&) (GODOTPATH/godot/./core/method_bind.gen.inc:903 (discriminator 8)) [17] Object::call(StringName const&, Variant const**, int, Variant::CallError&) (GODOTPATH/godot/core/object.cpp:914 (discriminator 1)) [18] Variant::call_ptr(StringName const&, Variant const**, int, Variant*, Variant::CallError&) (GODOTPATH/godot/core/variant_call.cpp:1013 (discriminator 1)) [19] GDScriptFunction::call(GDScriptInstance*, Variant const**, int, Variant::CallError&, GDScriptFunction::CallState*) (GODOTPATH/godot/modules/gdscript/gdscript_function.cpp:811) [20] GDScriptInstance::call(StringName const&, Variant const**, int, Variant::CallError&) (GODOTPATH/godot/modules/gdscript/gdscript.cpp:1151) [21] Object::call(StringName const&, Variant const**, int, Variant::CallError&) (GODOTPATH/godot/core/object.cpp:893 (discriminator 1)) [22] Object::emit_signal(StringName const&, Variant const**, int) (GODOTPATH/godot/core/object.cpp:1195 (discriminator 1)) [23] Object::emit_signal(StringName const&, Variant const&, Variant const&, Variant const&, Variant const&, Variant const&) (GODOTPATH/godot/core/object.cpp:1241) [24] BaseButton::_gui_input(Ref<InputEvent>) (GODOTPATH/godot/scene/gui/base_button.cpp:139 (discriminator 2)) [25] MethodBind1<Ref<InputEvent> >::call(Object*, Variant const**, int, Variant::CallError&) (GODOTPATH/godot/core/method_bind.gen.inc:729 (discriminator 12)) [26] Object::call_multilevel(StringName const&, Variant const**, int) (GODOTPATH/godot/core/object.cpp:748 (discriminator 1)) [27] Object::call_multilevel(StringName const&, Variant const&, Variant const&, Variant const&, Variant const&, Variant const&) (GODOTPATH/godot/core/object.cpp:855) [28] Viewport::_gui_call_input(Control*, Ref<InputEvent> const&) (GODOTPATH/godot/scene/main/viewport.cpp:1480 (discriminator 2)) [29] Viewport::_gui_input_event(Ref<InputEvent>) (GODOTPATH/godot/scene/main/viewport.cpp:1830 (discriminator 3)) [30] Viewport::input(Ref<InputEvent> const&) (GODOTPATH/godot/scene/main/viewport.cpp:2445 (discriminator 2)) [31] Viewport::_vp_input(Ref<InputEvent> const&) (GODOTPATH/godot/scene/main/viewport.cpp:1324) [32] MethodBind1<Ref<InputEvent> const&>::call(Object*, Variant const**, int, Variant::CallError&) (GODOTPATH/godot/core/method_bind.gen.inc:729 (discriminator 12)) [33] Object::call(StringName const&, Variant const**, int, Variant::CallError&) (GODOTPATH/godot/core/object.cpp:914 (discriminator 1)) [34] Object::call(StringName const&, Variant const&, Variant const&, Variant const&, Variant const&, Variant const&) (GODOTPATH/godot/core/object.cpp:839) [35] SceneTree::call_group_flags(unsigned int, StringName const&, StringName const&, Variant const&, Variant const&, Variant const&, Variant const&, Variant const&) (GODOTPATH/godot/scene/main/scene_tree.cpp:248) [36] SceneTree::input_event(Ref<InputEvent> const&) (GODOTPATH/godot/scene/main/scene_tree.cpp:404 (discriminator 6)) [37] InputDefault::parse_input_event(Ref<InputEvent> const&) (GODOTPATH/godot/main/input_default.cpp:323) [38] OS_X11::process_xevents() (GODOTPATH/godot/platform/x11/os_x11.cpp:1762 (discriminator 3)) [39] OS_X11::run() (GODOTPATH/godot/platform/x11/os_x11.cpp:2390) [40] GODOTPATH/godot/bin/godot.x11.tools.64(main+0xd3) [0xe74d49] (GODOTPATH/godot/platform/x11/godot_x11.cpp:56) [41] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0) [0x7fded8e3a830] (??:0) [42] GODOTPATH/godot/bin/godot.x11.tools.64(_start+0x29) [0xe74ba9] (??:?) – END OF BACKTRACE – Nothing read: Connection reset by peer ERROR: read: Server disconnected!

About this issue

  • Original URL
  • State: closed
  • Created 6 years ago
  • Comments: 18 (18 by maintainers)

Commits related to this issue

Most upvoted comments

Think I found the problem, fix coming.

I could never reproduce, but Valgrind complained about memory corruption. Due to how the bug happened, it seems the operator< at

bool DynamicFontData::CacheID::operator<(CacheID right) const {

may not have worked properly… I did not write this code, but it seemed fine to me. Still… I rewrote it a bit different and the error in valgrind stopped, so I guess this is fixed, but no idea why it was broke in the first place.