Godot: Crash when manually setting AnimationMultiTrackKeyEdit time

Created on 22 Apr 2020  路  3Comments  路  Source: godotengine/godot

Godot version: 3.2.1

OS/device including version: Ubuntu Linux 19.10, kernel 5.0.0-1046-oem-osp1

Issue description:
When changing the time of multiple keyframes, the editor crashes approximately half the time:

Screenshot from 2020-04-22 13-55-56

This only happens when the time is changed, rather than just selected and deselected. It doesn't happen at all when clicking and dragging keyframes in the timeline, or when doing it individually (AnimationTrackKeyEdit).

The stacktrace doesn't appear to include symbols. However, this isn't just a segfault - this is a SIGILL (illegal instruction).

handle_crash: Program crashed with signal 4
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(+0x46470) [0x7f2f4ecc8470] (??:0)
[2] /home/doug/bin-ish/Godot_v3.2.1-stable_x11.64() [0x1a0e00b] (<artificial>:?)
[3] /home/doug/bin-ish/Godot_v3.2.1-stable_x11.64() [0x1abbb65] (<artificial>:?)
[...]

Steps to reproduce:

  • Add an AnimationPlayer to a node
  • Make a new animation
  • Create keyframes for two separate properties
  • Select both keyframes
  • Change the time of the keyframes in the AnimationMultiTrackKeyEdit panel

Minimal reproduction project:

godot-sigill.tar.gz

bug confirmed crash editor

Most helpful comment

It seems to only happen when setting it to a value equal or bigger than 1, then changing to a lower value back. Will investigate.

All 3 comments

Stacktrace:

ERROR: operator[]: FATAL: Index p_index = 1 is out of bounds (size() = 1).
   At: ./core/list.h:455.
handle_crash: Program crashed with signal 4
Dumping the backtrace. Please include this when reporting the bug on https://github.com/godotengine/godot/issues
[1] /usr/lib/libc.so.6(+0x3bd70) [0x7fddaa5b7d70] (??:0)
[2] List<float, DefaultAllocator>::operator[](int) (/home/guilherme/Workspaces/godot/./core/list.h:455 (discriminator 7))
[3] AnimationMultiTrackKeyEdit::_key_ofs_changed(Ref<Animation> const&, float, float) (/home/guilherme/Workspaces/godot/editor/animation_track_editor.cpp:764)
[4] MethodBind3<Ref<Animation> const&, float, float>::call(Object*, Variant const**, int, Variant::CallError&) (/home/guilherme/Workspaces/godot/./core/method_bind.gen.inc:2303 (discriminator 26))
[5] Object::call(StringName const&, Variant const**, int, Variant::CallError&) (/home/guilherme/Workspaces/godot/core/object.cpp:921 (discriminator 1))
[6] UndoRedo::_process_operation_list(List<UndoRedo::Operation, DefaultAllocator>::Element*) (/home/guilherme/Workspaces/godot/core/undo_redo.cpp:294 (discriminator 4))
[7] UndoRedo::redo() (/home/guilherme/Workspaces/godot/core/undo_redo.cpp:338)
[8] UndoRedo::commit_action() (/home/guilherme/Workspaces/godot/core/undo_redo.cpp:260)
[9] AnimationMultiTrackKeyEdit::_set(StringName const&, Variant const&) (/home/guilherme/Workspaces/godot/editor/animation_track_editor.cpp:1050)
[10] AnimationMultiTrackKeyEdit::_setv(StringName const&, Variant const&) (/home/guilherme/Workspaces/godot/editor/animation_track_editor.cpp:702 (discriminator 11))
[11] Object::set(StringName const&, Variant const&, bool*) (/home/guilherme/Workspaces/godot/core/object.cpp:446)
[12] EditorInspector::_edit_set(String const&, Variant const&, bool, String const&) (/home/guilherme/Workspaces/godot/editor/editor_inspector.cpp:2002 (discriminator 2))
[13] EditorInspector::_property_changed(String const&, Variant const&, String const&, bool) (/home/guilherme/Workspaces/godot/editor/editor_inspector.cpp:2065)
[14] MethodBind4<String const&, Variant const&, String const&, bool>::call(Object*, Variant const**, int, Variant::CallError&) (/home/guilherme/Workspaces/godot/./core/method_bind.gen.inc:3115 (discriminator 33))
[15] Object::call(StringName const&, Variant const**, int, Variant::CallError&) (/home/guilherme/Workspaces/godot/core/object.cpp:921 (discriminator 1))
[16] Object::emit_signal(StringName const&, Variant const**, int) (/home/guilherme/Workspaces/godot/core/object.cpp:1217 (discriminator 1))
[17] EditorProperty::emit_changed(StringName const&, Variant const&, StringName const&, bool) (/home/guilherme/Workspaces/godot/editor/editor_inspector.cpp:89 (discriminator 3))
[18] EditorPropertyFloat::_value_changed(double) (/home/guilherme/Workspaces/godot/editor/editor_properties.cpp:893 (discriminator 6))
[19] MethodBind1<double>::call(Object*, Variant const**, int, Variant::CallError&) (/home/guilherme/Workspaces/godot/./core/method_bind.gen.inc:775 (discriminator 12))
[20] Object::call(StringName const&, Variant const**, int, Variant::CallError&) (/home/guilherme/Workspaces/godot/core/object.cpp:921 (discriminator 1))
[21] Object::emit_signal(StringName const&, Variant const**, int) (/home/guilherme/Workspaces/godot/core/object.cpp:1217 (discriminator 1))
[22] Object::emit_signal(StringName const&, Variant const&, Variant const&, Variant const&, Variant const&, Variant const&) (/home/guilherme/Workspaces/godot/core/object.cpp:1275)
[23] Range::_value_changed_notify() (/home/guilherme/Workspaces/godot/scene/gui/range.cpp:49 (discriminator 4))
[24] Range::Shared::emit_value_changed() (/home/guilherme/Workspaces/godot/scene/gui/range.cpp:60)
[25] Range::set_value(double) (/home/guilherme/Workspaces/godot/scene/gui/range.cpp:100)
[26] EditorSpinSlider::_evaluate_input_text() (/home/guilherme/Workspaces/godot/editor/editor_spin_slider.cpp:358)
[27] EditorSpinSlider::_value_focus_exited() (/home/guilherme/Workspaces/godot/editor/editor_spin_slider.cpp:386)
[28] MethodBind0::call(Object*, Variant const**, int, Variant::CallError&) (/home/guilherme/Workspaces/godot/./core/method_bind.gen.inc:61 (discriminator 4))
[29] Object::call(StringName const&, Variant const**, int, Variant::CallError&) (/home/guilherme/Workspaces/godot/core/object.cpp:921 (discriminator 1))
[30] Object::emit_signal(StringName const&, Variant const**, int) (/home/guilherme/Workspaces/godot/core/object.cpp:1217 (discriminator 1))
[31] Object::emit_signal(StringName const&, Variant const&, Variant const&, Variant const&, Variant const&, Variant const&) (/home/guilherme/Workspaces/godot/core/object.cpp:1275)
[32] Control::_notification(int) (/home/guilherme/Workspaces/godot/scene/gui/control.cpp:643)
[33] Control::_notificationv(int, bool) (/home/guilherme/Workspaces/godot/./scene/gui/control.h:48 (discriminator 14))
[34] LineEdit::_notificationv(int, bool) (/home/guilherme/Workspaces/godot/scene/gui/line_edit.h:39)
[35] Object::notification(int, bool) (/home/guilherme/Workspaces/godot/core/object.cpp:933)
[36] Viewport::_gui_remove_focus() (/home/guilherme/Workspaces/godot/scene/main/viewport.cpp:2653)
[37] Viewport::_gui_hid_control(Control*) (/home/guilherme/Workspaces/godot/scene/main/viewport.cpp:2620)
[38] Control::_notification(int) (/home/guilherme/Workspaces/godot/scene/gui/control.cpp:663)
[39] Control::_notificationv(int, bool) (/home/guilherme/Workspaces/godot/./scene/gui/control.h:48 (discriminator 14))
[40] LineEdit::_notificationv(int, bool) (/home/guilherme/Workspaces/godot/scene/gui/line_edit.h:39 (discriminator 3))
[41] Object::notification(int, bool) (/home/guilherme/Workspaces/godot/core/object.cpp:933)
[42] CanvasItem::_propagate_visibility_changed(bool) (/home/guilherme/Workspaces/godot/scene/2d/canvas_item.cpp:391)
[43] CanvasItem::hide() (/home/guilherme/Workspaces/godot/scene/2d/canvas_item.cpp:435)
[44] EditorSpinSlider::_value_input_entered(String const&) (/home/guilherme/Workspaces/godot/editor/editor_spin_slider.cpp:365)
[45] MethodBind1<String const&>::call(Object*, Variant const**, int, Variant::CallError&) (/home/guilherme/Workspaces/godot/./core/method_bind.gen.inc:775 (discriminator 12))
[46] Object::call(StringName const&, Variant const**, int, Variant::CallError&) (/home/guilherme/Workspaces/godot/core/object.cpp:921 (discriminator 1))
[47] Object::emit_signal(StringName const&, Variant const**, int) (/home/guilherme/Workspaces/godot/core/object.cpp:1217 (discriminator 1))
[48] Object::emit_signal(StringName const&, Variant const&, Variant const&, Variant const&, Variant const&, Variant const&) (/home/guilherme/Workspaces/godot/core/object.cpp:1275)
[49] LineEdit::_gui_input(Ref<InputEvent>) (/home/guilherme/Workspaces/godot/scene/gui/line_edit.cpp:300 (discriminator 4))
[50] MethodBind1<Ref<InputEvent> >::call(Object*, Variant const**, int, Variant::CallError&) (/home/guilherme/Workspaces/godot/./core/method_bind.gen.inc:775 (discriminator 12))
[51] Object::call_multilevel(StringName const&, Variant const**, int) (/home/guilherme/Workspaces/godot/core/object.cpp:763 (discriminator 1))
[52] Object::call_multilevel(StringName const&, Variant const&, Variant const&, Variant const&, Variant const&, Variant const&) (/home/guilherme/Workspaces/godot/core/object.cpp:864)
[53] Viewport::_gui_input_event(Ref<InputEvent>) (/home/guilherme/Workspaces/godot/scene/main/viewport.cpp:2404 (discriminator 2))
[54] Viewport::input(Ref<InputEvent> const&) (/home/guilherme/Workspaces/godot/scene/main/viewport.cpp:2825 (discriminator 2))
[55] Viewport::_vp_input(Ref<InputEvent> const&) (/home/guilherme/Workspaces/godot/scene/main/viewport.cpp:1445)
[56] MethodBind1<Ref<InputEvent> const&>::call(Object*, Variant const**, int, Variant::CallError&) (/home/guilherme/Workspaces/godot/./core/method_bind.gen.inc:775 (discriminator 12))
[57] Object::call(StringName const&, Variant const**, int, Variant::CallError&) (/home/guilherme/Workspaces/godot/core/object.cpp:921 (discriminator 1))
[58] Object::call(StringName const&, Variant const&, Variant const&, Variant const&, Variant const&, Variant const&) (/home/guilherme/Workspaces/godot/core/object.cpp:848)
[59] SceneTree::call_group_flags(unsigned int, StringName const&, StringName const&, Variant const&, Variant const&, Variant const&, Variant const&, Variant const&) (/home/guilherme/Workspaces/godot/scene/main/scene_tree.cpp:275)
[60] SceneTree::input_event(Ref<InputEvent> const&) (/home/guilherme/Workspaces/godot/scene/main/scene_tree.cpp:431 (discriminator 6))
[61] InputDefault::_parse_input_event_impl(Ref<InputEvent> const&, bool) (/home/guilherme/Workspaces/godot/main/input_default.cpp:416)
[62] InputDefault::parse_input_event(Ref<InputEvent> const&) (/home/guilherme/Workspaces/godot/main/input_default.cpp:260)
[63] InputDefault::flush_accumulated_events() (/home/guilherme/Workspaces/godot/main/input_default.cpp:679)
[64] OS_X11::process_xevents() (/home/guilherme/Workspaces/godot/platform/x11/os_x11.cpp:2676)
[65] OS_X11::run() (/home/guilherme/Workspaces/godot/platform/x11/os_x11.cpp:3241)
[66] /home/guilherme/Workspaces/godot-stable-branch/bin/godot.x11.tools.64(main+0x121) [0x13f86c7] (/home/guilherme/Workspaces/godot/platform/x11/godot_x11.cpp:57)
[67] /usr/lib/libc.so.6(__libc_start_main+0xf3) [0x7fddaa5a3023] (??:0)
[68] /home/guilherme/Workspaces/godot-stable-branch/bin/godot.x11.tools.64(_start+0x2e) [0x13f84ee] (??:?)
-- END OF BACKTRACE --

Also confirmed, had noticed it before, seems to happen if you make changes multiple times in row to the same field.

@YeldhamDev Is it related to this? https://github.com/godotengine/godot/pull/30778

It seems to only happen when setting it to a value equal or bigger than 1, then changing to a lower value back. Will investigate.

Was this page helpful?
0 / 5 - 0 ratings