godotengine / godot

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

Crash in when instancing `CPUParticles3D` when multithread rendering is active #53231

Open qarmin opened 3 years ago

qarmin commented 3 years ago

Godot version

4.0.dev.custom_build. 87de2e7c4

System information

Ubuntu 21.04 - Nvidia GTX 970, Gnome shell 3.38 X11

Issue description

Simple

func _ready():
    add_child(CPUParticles3D.new())

cause this crash

#0  futex_wait (private=0, expected=2, futex_word=0x55556092e080) at ../sysdeps/nptl/futex-internal.h:146
#1  __lll_lock_wait (futex=futex@entry=0x55556092e080, private=0) at lowlevellock.c:52
#2  0x00007ffff7db87b0 in __GI___pthread_mutex_lock (mutex=0x55556092e080) at ../nptl/pthread_mutex_lock.c:115
#3  0x00005555576dfd8b in __gthread_mutex_lock (__mutex=0x55556092e080) at /usr/include/x86_64-linux-gnu/c++/10/bits/gthr-default.h:749
#4  0x00005555576dfe0a in __gthread_recursive_mutex_lock (__mutex=0x55556092e080) at /usr/include/x86_64-linux-gnu/c++/10/bits/gthr-default.h:811
#5  0x00005555576dffba in std::recursive_mutex::lock (this=0x55556092e080) at /usr/include/c++/10/mutex:106
#6  0x000055555b8f33c4 in MutexImpl<std::recursive_mutex>::lock (this=0x55556092e080) at ./core/os/mutex.h:47
#7  CommandQueueMT::lock (this=0x55556092dd30) at core/templates/command_queue_mt.cpp:37
#8  0x000055555b8f3449 in CommandQueueMT::_alloc_sync_sem (this=0x55556092dd30) at core/templates/command_queue_mt.cpp:53
#9  0x000055555ae9e5af in CommandQueueMT::push_and_sync<RenderingServerDefault, void (RenderingServerDefault::*)()> (this=0x55556092dd30, p_instance=0x55556092dbc0, 
    p_method=(void (RenderingServerDefault::*)(RenderingServerDefault * const)) 0x55555ae757b8 <RenderingServerDefault::_thread_flush()>) at ./core/templates/command_queue_mt.h:399
#10 0x000055555ae75963 in RenderingServerDefault::sync (this=0x55556092dbc0) at servers/rendering/rendering_server_default.cpp:365
#11 0x000055555771c825 in Main::iteration () at main/main.cpp:2568
#12 0x00005555576d9e38 in OS_LinuxBSD::run (this=0x7fffffffd9e0) at platform/linuxbsd/os_linuxbsd.cpp:342
#13 0x00005555576d61df in main (argc=1, argv=0x7fffffffded8) at platform/linuxbsd/godot_linuxbsd.cpp:58

Steps to reproduce

Above

Minimal reproduction project

Untitled Folder.zip

qarmin commented 3 years ago

Same thing happens with almost all nodes like e.g.

"CPUParticles3D", 
"CSGBox3D",
"Camera2D",
"Camera3D",
"CanvasGroup",
"CanvasLayer",
"CanvasModulate",
"CenterContainer",
qarmin commented 1 year ago

Still happens with Beta 6

#0  0x000000000756272d in Memory::alloc_static (p_bytes=0, p_pad_align=false)
    at core/os/memory.cpp:68
#1  0x0000000007b60125 in CowData<VMap<Callable, Object::SignalData::Slot>::Pair>::_copy_on_write (this=0x7fffd3800218) at ./core/templates/cowdata.h:234
#2  0x0000000007b5cdc2 in CowData<VMap<Callable, Object::SignalData::Slot>::Pair>::get_m (this=0x7fffd3800218, p_index=0) at ./core/templates/cowdata.h:150
#3  0x0000000007b5852c in VMap<Callable, Object::SignalData::Slot>::getv (
    this=0x7fffd3800218, p_index=0) at ./core/templates/vmap.h:168
#4  0x0000000007b4cb8f in Object::emit_signalp (this=0xd1965f0, p_name=..., 
    p_args=0x0, p_argcount=0) at core/object/object.cpp:1029
#5  0x00000000037a62d6 in Object::emit_signal<>(StringName const&) (
    this=0xd1965f0, p_name=...) at ./core/object/object.h:865
#6  0x0000000006de8f2f in RenderingServerDefault::_draw (this=0xd1965f0, 
    p_swap_buffers=true, frame_step=0.13333333333333333)
    at servers/rendering/rendering_server_default.cpp:73
#7  0x0000000006dea851 in RenderingServerDefault::_thread_draw (
    this=0xd1965f0, p_swap_buffers=true, frame_step=0.13333333333333333)
    at servers/rendering/rendering_server_default.cpp:347
#8  0x0000000006e34bea in CommandQueueMT::Command2<RenderingServerDefault, void (RenderingServerDefault::*)(bool, double), bool, double>::call (this=0xfa60428)
    at ./core/templates/command_queue_mt.h:322
#9  0x0000000002c61c83 in CommandQueueMT::_flush (this=0xd196830)
    at ./core/templates/command_queue_mt.h:373
--Type <RET> for more, q to quit, c to continue without paging--
#10 0x0000000006deb0b2 in CommandQueueMT::flush_if_pending (this=0xd196830) at ./core/templates/command_queue_mt.h:404
#11 0x0000000006defaef in RenderingServerDefault::multimesh_set_buffer (this=0xd1965f0, p1=..., p2=...) at servers/rendering/rendering_server_default.h:335
#12 0x0000000005de6765 in CPUParticles3D::_update_render_thread (this=0xfbef7a0) at scene/3d/cpu_particles_3d.cpp:1258
#13 0x0000000005e085f1 in call_with_variant_args_helper<CPUParticles3D>(CPUParticles3D*, void (CPUParticles3D::*)(), Variant const**, Callable::CallError&, IndexSequence<>) (p_instance=0xfbef7a0, 
    p_method=(void (CPUParticles3D::*)(CPUParticles3D * const)) 0x5de66c4 <CPUParticles3D::_update_render_thread()>, p_args=0x0, r_error=...) at ./core/variant/binder_common.h:262
#14 0x0000000005e06774 in call_with_variant_args<CPUParticles3D> (p_instance=0xfbef7a0, p_method=(void (CPUParticles3D::*)(CPUParticles3D * const)) 0x5de66c4 <CPUParticles3D::_update_render_thread()>, 
    p_args=0x0, p_argcount=0, r_error=...) at ./core/variant/binder_common.h:376
#15 0x0000000005e041d9 in CallableCustomMethodPointer<CPUParticles3D>::call (this=0xfbf4e60, p_arguments=0x0, p_argcount=0, r_return_value=..., r_call_error=...) at ./core/object/callable_method_pointer.h:104
#16 0x00000000077e49b3 in Callable::callp (this=0x7fffcc577e78, p_arguments=0x0, p_argcount=0, r_return_value=..., r_call_error=...) at core/variant/callable.cpp:50
#17 0x0000000007b4cc5b in Object::emit_signalp (this=0xd1965f0, p_name=..., p_args=0x0, p_argcount=0) at core/object/object.cpp:1046
#18 0x00000000037a62d6 in Object::emit_signal<>(StringName const&) (this=0xd1965f0, p_name=...) at ./core/object/object.h:865
#19 0x0000000006de8f2f in RenderingServerDefault::_draw (this=0xd1965f0, p_swap_buffers=true, frame_step=0.13333333333333333) at servers/rendering/rendering_server_default.cpp:73
#20 0x0000000006dea851 in RenderingServerDefault::_thread_draw (this=0xd1965f0, p_swap_buffers=true, frame_step=0.13333333333333333) at servers/rendering/rendering_server_default.cpp:347
#21 0x0000000006e34bea in CommandQueueMT::Command2<RenderingServerDefault, void (RenderingServerDefault::*)(bool, double), bool, double>::call (this=0xfa60428) at ./core/templates/command_queue_mt.h:322
#22 0x0000000002c61c83 in CommandQueueMT::_flush (this=0xd196830) at ./core/templates/command_queue_mt.h:373
#23 0x0000000006deb0b2 in CommandQueueMT::flush_if_pending (this=0xd196830) at ./core/templates/command_queue_mt.h:404
#24 0x0000000006defaef in RenderingServerDefault::multimesh_set_buffer (this=0xd1965f0, p1=..., p2=...) at servers/rendering/rendering_server_default.h:335
#25 0x0000000005de6765 in CPUParticles3D::_update_render_thread (this=0xfbef7a0) at scene/3d/cpu_particles_3d.cpp:1258
#26 0x0000000005e085f1 in call_with_variant_args_helper<CPUParticles3D>(CPUParticles3D*, void (CPUParticles3D::*)(), Variant const**, Callable::CallError&, IndexSequence<>) (p_instance=0xfbef7a0, 
    p_method=(void (CPUParticles3D::*)(CPUParticles3D * const)) 0x5de66c4 <CPUParticles3D::_update_render_thread()>, p_args=0x0, r_error=...) at ./core/variant/binder_common.h:262
#27 0x0000000005e06774 in call_with_variant_args<CPUParticles3D> (p_instance=0xfbef7a0, p_method=(void (CPUParticles3D::*)(CPUParticles3D * const)) 0x5de66c4 <CPUParticles3D::_update_render_thread()>, 
    p_args=0x0, p_argcount=0, r_error=...) at ./core/variant/binder_common.h:376
#28 0x0000000005e041d9 in CallableCustomMethodPointer<CPUParticles3D>::call (this=0xfbf4e60, p_arguments=0x0, p_argcount=0, r_return_value=..., r_call_error=...) at ./core/object/callable_method_pointer.h:104
#29 0x00000000077e49b3 in Callable::callp (this=0x7fffcc577dd8, p_arguments=0x0, p_argcount=0, r_return_value=..., r_call_error=...) at core/variant/callable.cpp:50
#30 0x0000000007b4cc5b in Object::emit_signalp (this=0xd1965f0, p_name=..., p_args=0x0, p_argcount=0) at core/object/object.cpp:1046
#31 0x00000000037a62d6 in Object::emit_signal<>(StringName const&) (this=0xd1965f0, p_name=...) at ./core/object/object.h:865
#32 0x0000000006de8f2f in RenderingServerDefault::_draw (this=0xd1965f0, p_swap_buffers=true, frame_step=0.13333333333333333) at servers/rendering/rendering_server_default.cpp:73
#33 0x0000000006dea851 in RenderingServerDefault::_thread_draw (this=0xd1965f0, p_swap_buffers=true, frame_step=0.13333333333333333) at servers/rendering/rendering_server_default.cpp:347
#34 0x0000000006e34bea in CommandQueueMT::Command2<RenderingServerDefault, void (RenderingServerDefault::*)(bool, double), bool, double>::call (this=0xfa60428) at ./core/templates/command_queue_mt.h:322
#35 0x0000000002c61c83 in CommandQueueMT::_flush (this=0xd196830) at ./core/templates/command_queue_mt.h:373
#36 0x0000000006deb0b2 in CommandQueueMT::flush_if_pending (this=0xd196830) at ./core/templates/command_queue_mt.h:404
#37 0x0000000006defaef in RenderingServerDefault::multimesh_set_buffer (this=0xd1965f0, p1=..., p2=...) at servers/rendering/rendering_server_default.h:335
#38 0x0000000005de6765 in CPUParticles3D::_update_render_thread (this=0xfbef7a0) at scene/3d/cpu_particles_3d.cpp:1258
#39 0x0000000005e085f1 in call_with_variant_args_helper<CPUParticles3D>(CPUParticles3D*, void (CPUParticles3D::*)(), Variant const**, Callable::CallError&, IndexSequence<>) (p_instance=0xfbef7a0, 
    p_method=(void (CPUParticles3D::*)(CPUParticles3D * const)) 0x5de66c4 <CPUParticles3D::_update_render_thread()>, p_args=0x0, r_error=...) at ./core/variant/binder_common.h:262
#40 0x0000000005e06774 in call_with_variant_args<CPUParticles3D> (p_instance=0xfbef7a0, p_method=(void (CPUParticles3D::*)(CPUParticles3D * const)) 0x5de66c4 <CPUParticles3D::_update_render_thread()>, 
    p_args=0x0, p_argcount=0, r_error=...) at ./core/variant/binder_common.h:376
#41 0x0000000005e041d9 in CallableCustomMethodPointer<CPUParticles3D>::call (this=0xfbf4e60, p_arguments=0x0, p_argcount=0, r_return_value=..., r_call_error=...) at ./core/object/callable_method_pointer.h:104
#42 0x00000000077e49b3 in Callable::callp (this=0x7fffcc577d38, p_arguments=0x0, p_argcount=0, r_return_value=..., r_call_error=...) at core/variant/callable.cpp:50
#43 0x0000000007b4cc5b in Object::emit_signalp (this=0xd1965f0, p_name=..., p_args=0x0, p_argcount=0) at core/object/object.cpp:1046
#44 0x00000000037a62d6 in Object::emit_signal<>(StringName const&) (this=0xd1965f0, p_name=...) at ./core/object/object.h:865
#45 0x0000000006de8f2f in RenderingServerDefault::_draw (this=0xd1965f0, p_swap_buffers=true, frame_step=0.13333333333333333) at servers/rendering/rendering_server_default.cpp:73
#46 0x0000000006dea851 in RenderingServerDefault::_thread_draw (this=0xd1965f0, p_swap_buffers=true, frame_step=0.13333333333333333) at servers/rendering/rendering_server_default.cpp:347
#47 0x0000000006e34bea in CommandQueueMT::Command2<RenderingServerDefault, void (RenderingServerDefault::*)(bool, double), bool, double>::call (this=0xfa60428) at ./core/templates/command_queue_mt.h:322
#48 0x0000000002c61c83 in CommandQueueMT::_flush (this=0xd196830) at ./core/templates/command_queue_mt.h:373
#49 0x0000000006deb0b2 in CommandQueueMT::flush_if_pending (this=0xd196830) at ./core/templates/command_queue_mt.h:404
#50 0x0000000006defaef in RenderingServerDefault::multimesh_set_buffer (this=0xd1965f0, p1=..., p2=...) at servers/rendering/rendering_server_default.h:335
#51 0x0000000005de6765 in CPUParticles3D::_update_render_thread (this=0xfbef7a0) at scene/3d/cpu_particles_3d.cpp:1258
#52 0x0000000005e085f1 in call_with_variant_args_helper<CPUParticles3D>(CPUParticles3D*, void (CPUParticles3D::*)(), Variant const**, Callable::CallError&, IndexSequence<>) (p_instance=0xfbef7a0, 
    p_method=(void (CPUParticles3D::*)(CPUParticles3D * const)) 0x5de66c4 <CPUParticles3D::_update_render_thread()>, p_args=0x0, r_error=...) at ./core/variant/binder_common.h:262
#53 0x0000000005e06774 in call_with_variant_args<CPUParticles3D> (p_instance=0xfbef7a0, p_method=(void (CPUParticles3D::*)(CPUParticles3D * const)) 0x5de66c4 <CPUParticles3D::_update_render_thread()>, 
    p_args=0x0, p_argcount=0, r_error=...) at ./core/variant/binder_common.h:376