Skip to content

ClassDB AHashMap segmentation fault #1884

@Withaust

Description

@Withaust

Godot version

4.5.1.stable

godot-cpp version

4.5

System information

Windows 10

Issue description

Image
game.windows.editor.dev.x86_64.dll!godot::AHashMap<godot::StringName, godot::ClassDB::ClassInfo::VirtualMethod, godot::HashMapHasherDefault, godot::HashMapComparatorDefault<godot::StringName> >::_lookup_pos_with_hash(const godot::AHashMap<godot::StringName, godot::ClassDB::ClassInfo::VirtualMethod, godot::HashMapHasherDefault, godot::HashMapComparatorDefault<godot::StringName> > * const this, const godot::StringName & p_key, uint32_t & r_pos, uint32_t & r_hash_pos, uint32_t p_hash) (a:\Recusant\godot-cpp\include\godot_cpp\templates\a_hash_map.hpp:136)
game.windows.editor.dev.x86_64.dll!godot::AHashMap<godot::StringName, godot::ClassDB::ClassInfo::VirtualMethod, godot::HashMapHasherDefault, godot::HashMapComparatorDefault<godot::StringName> >::_lookup_pos(const godot::AHashMap<godot::StringName, godot::ClassDB::ClassInfo::VirtualMethod, godot::HashMapHasherDefault, godot::HashMapComparatorDefault<godot::StringName> > * const this, const godot::StringName & p_key, uint32_t & r_pos, uint32_t & r_hash_pos) (a:\Recusant\godot-cpp\include\godot_cpp\templates\a_hash_map.hpp:127)
game.windows.editor.dev.x86_64.dll!godot::AHashMap<godot::StringName, godot::ClassDB::ClassInfo::VirtualMethod, godot::HashMapHasherDefault, godot::HashMapComparatorDefault<godot::StringName> >::find(const godot::AHashMap<godot::StringName, godot::ClassDB::ClassInfo::VirtualMethod, godot::HashMapHasherDefault, godot::HashMapComparatorDefault<godot::StringName> > * const this, const godot::StringName & p_key) (a:\Recusant\godot-cpp\include\godot_cpp\templates\a_hash_map.hpp:579)
game.windows.editor.dev.x86_64.dll!godot::ClassDB::get_virtual_func(void * p_userdata, GDExtensionConstStringNamePtr p_name, uint32_t p_hash) (a:\Recusant\godot-cpp\src\core\class_db.cpp:300)
Node::_gdvirtual__enter_tree_call(Node * const this) (a:\Recusant\godot\scene\main\node.h:397)
Node::_propagate_enter_tree(Node * const this) (a:\Recusant\godot\scene\main\node.cpp:343)
Node::_set_tree(Node * const this, SceneTree * p_tree) (a:\Recusant\godot\scene\main\node.cpp:3319)
Node::_add_child_nocheck(Node * const this, Node * p_child, const StringName & p_name, Node::InternalMode p_internal_mode) (a:\Recusant\godot\scene\main\node.cpp:1670)
Node::add_child(Node * const this, Node * p_child, bool p_force_readable_name, Node::InternalMode p_internal) (a:\Recusant\godot\scene\main\node.cpp:1700)
call_with_ptr_args_helper<__UnexistingClass, Node*, bool, Node::InternalMode, 0ull, 1ull, 2ull>(__UnexistingClass * p_instance, void (__UnexistingClass::*)(__UnexistingClass * const, Node *, bool, Node::InternalMode) p_method, const void ** p_args) (a:\Recusant\godot\core\variant\binder_common.h:244)
call_with_ptr_args<__UnexistingClass, Node*, bool, Node::InternalMode>(__UnexistingClass * p_instance, void (__UnexistingClass::*)(__UnexistingClass * const, Node *, bool, Node::InternalMode) p_method, const void ** p_args) (a:\Recusant\godot\core\variant\binder_common.h:492)
MethodBindT<Node*, bool, Node::InternalMode>::ptrcall(const MethodBindT<Node*, bool, Node::InternalMode> * const this, Object * p_object, const void ** p_args, void * r_ret) (a:\Recusant\godot\core\object\method_bind.h:360)
gdextension_object_method_bind_ptrcall(GDExtensionMethodBindPtr p_method_bind, GDExtensionObjectPtr p_instance, const GDExtensionConstTypePtr * p_args, GDExtensionTypePtr p_ret) (a:\Recusant\godot\core\extension\gdextension_interface.cpp:1336)
game.windows.editor.dev.x86_64.dll!godot::internal::_call_native_mb_no_ret<void**, signed char*, long long*>(const GDExtensionMethodBindPtr mb, void * instance) (a:\Recusant\godot-cpp\include\godot_cpp\core\engine_ptrcall.hpp:67)
game.windows.editor.dev.x86_64.dll!godot::Node::add_child(godot::Node * const this, godot::Node * p_node, bool p_force_readable_name, godot::Node::InternalMode p_internal) (a:\Recusant\godot-cpp\gen\src\classes\node.cpp:87)
game.windows.editor.dev.x86_64.dll!core::Bootstrap::_ready(core::Bootstrap * const this) (a:\Recusant\recusant\sources\core\system\bootstrap.cpp:210)
game.windows.editor.dev.x86_64.dll!godot::call_with_ptr_args_helper<core::Bootstrap>(core::Bootstrap*, void (core::Bootstrap::*)(), void const* const*, godot::IndexSequence<>)(core::Bootstrap * p_instance, void (core::Bootstrap::*)(core::Bootstrap * const) p_method, const GDExtensionConstTypePtr * p_args) (a:\Recusant\godot-cpp\include\godot_cpp\core\binder_common.hpp:193)
game.windows.editor.dev.x86_64.dll!godot::call_with_ptr_args<core::Bootstrap>(core::Bootstrap * p_instance, void (core::Bootstrap::*)(core::Bootstrap * const) p_method, const GDExtensionConstTypePtr * p_args) (a:\Recusant\godot-cpp\include\godot_cpp\core\binder_common.hpp:213)
game.windows.editor.dev.x86_64.dll!godot::Node::register_virtuals<core::Bootstrap, godot::Node>()::{lambda(void*, void const* const*, void*)#3}::operator()(void*, void const* const*, void*) const(const struct {...} * const __closure, GDExtensionObjectPtr p_instance, const GDExtensionConstTypePtr * p_args, GDExtensionTypePtr p_ret) (a:\Recusant\godot-cpp\gen\include\godot_cpp\classes\node.hpp:359)
game.windows.editor.dev.x86_64.dll!godot::Node::register_virtuals<core::Bootstrap, godot::Node>()::{lambda(void*, void const* const*, void*)#3}::_FUN(void*, void const* const*, void*)() (a:\Recusant\godot-cpp\gen\include\godot_cpp\classes\node.hpp:359)
Node::_gdvirtual__ready_call(Node * const this) (a:\Recusant\godot\scene\main\node.h:399)
Node::_notification(Node * const this, int p_notification) (a:\Recusant\godot\scene\main\node.cpp:266)
Node::_notification_forwardv(Node * const this, int p_notification) (a:\Recusant\godot\scene\main\node.h:48)
Object::_notification_forward(Object * const this, int p_notification) (a:\Recusant\godot\core\object\object.cpp:931)
Object::notification(Object * const this, int p_notification, bool p_reversed) (a:\Recusant\godot\core\object\object.h:893)
Node::_propagate_ready(Node * const this) (a:\Recusant\godot\scene\main\node.cpp:317)
Node::_propagate_ready(Node * const this) (a:\Recusant\godot\scene\main\node.cpp:308)
Node::_set_tree(Node * const this, SceneTree * p_tree) (a:\Recusant\godot\scene\main\node.cpp:3321)
SceneTree::initialize(SceneTree * const this) (a:\Recusant\godot\scene\main\scene_tree.cpp:577)
OS_Windows::run(OS_Windows * const this) (a:\Recusant\godot\platform\windows\os_windows.cpp:2328)
widechar_main(int argc, wchar_t ** argv) (a:\Recusant\godot\platform\windows\godot_windows.cpp:96)
_main() (a:\Recusant\godot\platform\windows\godot_windows.cpp:122)
main(int argc, char ** argv) (a:\Recusant\godot\platform\windows\godot_windows.cpp:141)

Steps to reproduce

Simply adding one node as a child of another during _ready of a startup scene can randomly cause this

Minimal reproduction project

recusant.zip

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions