Crash when Right-clicking Waypoints

Hello,
Synfig has been crashing on me whenever I right-click on specific waypoints recently.

It happens whenever I R-click any of the highlighted waypoints in the file linked below:

WaypointR-clickCrash

I’m running the latest development build (bc658a2aa) on Kubuntu 20.04
Thanks!

1 Like

I tried to replicate your screenshot right-clicking on advanced outline width position
Mine didn’t crash on any of those highlighted waypoints

BTW, very cool animation :slight_smile:

Mine neither. :confused: Build on top of a195452d01409e1a395f35679be1228c17a9e867 But there is a long time anybody touches this part of the code

Dang, I was hoping this would be an easy one. :pensive:

Some additional info:
The crash seems to happen on parameters that can be collapsed into a list such as the width point position shown above which collapses into the Width Point List, but also includes parameters in the Vertices list.

Here’s some highlights from my console output:

synfig(143662) [09:50:21 PM] info: Loading plugins from /home/gregory/.config/synfig/plugins
synfig(143662) [09:50:21 PM] warning: Can't read plugin directory: Error opening directory “/home/grego
ry/.config/synfig/plugins”: No such file or directory                                                   
synfig(143662) [09:50:21 PM] info: Init UI Manager...
synfig(143662) [09:50:21 PM] info: Init Dock Manager...
synfig(143662) [09:50:21 PM] info: Init State Manager...
synfig(143662) [09:50:21 PM] info: Init Main Window...
synfig(143662) [09:50:21 PM] info: Init Toolbox...

(synfigstudio:143662): Gtk-WARNING **: 21:50:21.107: Attempting to add a widget with type gtkmm__GtkDra
wingArea to a container of type gtkmm__GtkToolItem, but the widget is already inside a container of typ
e gtkmm__GtkGrid, please remove the widget from its existing container first.

(synfigstudio:143662): Gtk-CRITICAL **: 21:50:21.107: gtk_widget_set_focus_on_click: assertion 'GTK_IS_
WIDGET (widget)' failed
synfig(143662) [09:50:21 PM] info: Init About Dialog...
synfig(143662) [09:50:21 PM] info: Init Tool Options...


...


(synfigstudio:143662): Gdk-CRITICAL **: 21:50:21.501: gdk_device_set_key: assertion 'index_ < device->n
um_keys' failed

(synfigstudio:143662): Gdk-CRITICAL **: 21:50:21.501: gdk_device_set_key: assertion 'index_ < device->n
um_keys' failed
synfig(143662) [09:50:21 PM] info: Checking auto-recover...
synfig(143662) [09:50:21 PM] info: Done.
synfigstudio: /home/gregory/Synfig_Projects/Synfig_Builds/synfig/synfig-studio/src/synfigapp/value_desc
.h:329: bool synfigapp::ValueDesc::find_param_desc(synfig::ParamDesc&) const: Assertion `parent_is_laye
r()' failed.
Aborted (core dumped)

Thanks, I hope it helps.

1 Like

Hm… Good news: you seem to be building a debug version!
It’s “crashing” due to an assert() command (it only runs in debug versions :slight_smile: ) and it makes the software quit immediately if the assertion fails.

Why is it good? Because you can run it on a debugger (gdb) and provide a backtrace for us.
Please run on a console:
gdb path/to/synfigstudio

When it is ready and prompts you, type r and press Enter (‘r’ means ‘run’). Synfig will now start ‘normally’.

Use it Synfig to make the crash and then go back to console.
Now type bt (it means backtrace). It will spill a lot of info. Paste them here :wink:

2 Likes

Hey, that’s a nice tool! Here’s my output:

synfigstudio: /home/gregory/Synfig_Projects/Synfig_Builds/synfig/synfig-studio/src/synfigapp/value_desc
.h:302: bool synfigapp::ValueDesc::find_param_desc(synfig::ParamDesc&) const: Assertion `parent_is_laye
r()' failed.

Thread 1 "synfigstudio" received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
50      ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x00007ffff4c95859 in __GI_abort () at abort.c:79
#2  0x00007ffff4c95729 in __assert_fail_base
(fmt=0x7ffff4e2b588 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=0x55555633c105 "parent_i
s_layer()", file=0x55555633c050 "/home/gregory/Synfig_Projects/Synfig_Builds/synfig/synfig-studio/src/s
ynfigapp/value_desc.h", line=302, function=<optimized out>) at assert.c:92
#3  0x00007ffff4ca6f36 in __GI___assert_fail
(assertion=0x55555633c105 "parent_is_layer()", file=0x55555633c050 "/home/gregory/Synfig_Projects/S
ynfig_Builds/synfig/synfig-studio/src/synfigapp/value_desc.h", line=302, function=0x55555633c0c0 "bool
synfigapp::ValueDesc::find_param_desc(synfig::ParamDesc&) const") at assert.c:101
#4  0x00005555561011d3 in synfigapp::ValueDesc::find_param_desc(synfig::ParamDesc&) const
(this=0x5555570f5f20, out_param_desc=...)
at /home/gregory/Synfig_Projects/Synfig_Builds/synfig/synfig-studio/src/synfigapp/value_desc.h:302
#5  0x00005555561007b1 in studio::Widget_Waypoint::set_valuedesc(synfigapp::ValueDesc&)
(this=0x555556f5fa40, value_desc=...)
at /home/gregory/Synfig_Projects/Synfig_Builds/synfig/synfig-studio/src/gui/widgets/widget_waypoint
.cpp:257                                                                                                
#6  0x0000555555df04ec in studio::Dialog_Waypoint::set_value_desc(synfigapp::ValueDesc)
(this=0x5555570f5ee8, value_desc=...)
at /home/gregory/Synfig_Projects/Synfig_Builds/synfig/synfig-studio/src/gui/dialogs/dialog_waypoint
.cpp:124                                                                                                
#7  0x00005555561e229a in studio::CanvasView::on_waypoint_clicked_canvasview(synfigapp::ValueDesc, std:
:set<synfig::Waypoint, std::less<synfig::UniqueID>, std::allocator<synfig::Waypoint> >, int) (this=     
Python Exception <class 'AttributeError'> 'NoneType' object has no attribute 'pointer':
0x5555570f4800, value_desc=..., waypoint_set=std::set with 1 element, button=2)
at /home/gregory/Synfig_Projects/Synfig_Builds/synfig/synfig-studio/src/gui/canvasview.cpp:2952
#8  0x0000555555e5c358 in studio::Dock_Timetrack2::<lambda(synfigapp::ValueDesc, std::set<synfig::Waypo
int, std::less<synfig::UniqueID>, std::allocator<synfig::Waypoint> >, int)>::operator()(synfigapp::Valu
eDesc, std::set<synfig::Waypoint, std::less<synfig::UniqueID>, std::allocator<synfig::Waypoint> >, int)
constPython Exception <class 'AttributeError'> 'NoneType' object has no attribute 'pointer':           
(__closure=0x555558d8b040, value_desc=..., waypoint_set=std::set with 1 element, button=2)
at /home/gregory/Synfig_Projects/Synfig_Builds/synfig/synfig-studio/src/gui/docks/dock_timetrack2.c
--Type <RET> for more, q to quit, c to continue without paging--c
pp:98
#9  0x0000555555e5f238 in sigc::adaptor_functor<studio::Dock_Timetrack2::init_canvas_view_vfunc(etl::lo
ose_handle<studio::CanvasView>)::<lambda(synfigapp::ValueDesc, std::set<synfig::Waypoint, std::less<syn
fig::UniqueID>, std::allocator<synfig::Waypoint> >, int)> >::operator()<const synfigapp::ValueDesc&, co
nst std::set<synfig::Waypoint, std::less<synfig::UniqueID> >&, int const&>(const synfigapp::ValueDesc &
, const std::set<synfig::Waypoint, std::less<synfig::UniqueID>, std::allocator<synfig::Waypoint> > &, c
onst int &) const (this=0x555558d8b040, _A_arg1=..., _A_arg2=Python Exception <class 'AttributeError'>
'NoneType' object has no attribute 'pointer':
std::set with 1 element, _A_arg3=@0x7fffffffd100: 3) at /usr/include/sigc++-2.0/sigc++/adaptors/adaptor
_trait.h:128                                                                                            
#10 0x0000555555e5ea12 in sigc::internal::slot_call<studio::Dock_Timetrack2::init_canvas_view_vfunc(etl
::loose_handle<studio::CanvasView>)::<lambda(synfigapp::ValueDesc, std::set<synfig::Waypoint, std::less
<synfig::UniqueID>, std::allocator<synfig::Waypoint> >, int)>, void, synfigapp::ValueDesc, std::set<syn
fig::Waypoint, std::less<synfig::UniqueID>, std::allocator<synfig::Waypoint> >, int>::call_it(sigc::int
ernal::slot_rep *, sigc::type_trait_take_t, sigc::type_trait_take_t, sigc::type_trait_take_t) (rep=0x55
5558d8b010, a_#0=..., a_#1=..., a_#2=@0x7fffffffd100: 3) at /usr/include/sigc++-2.0/sigc++/functors/slo
t.h:451                                                                                                 
#11 0x0000555555e5768c in sigc::internal::signal_emit3<void, synfigapp::ValueDesc, std::set<synfig::Way
point, std::less<synfig::UniqueID>, std::allocator<synfig::Waypoint> >, int, sigc::nil>::emit(sigc::int
ernal::signal_impl*, synfigapp::ValueDesc const&, std::set<synfig::Waypoint, std::less<synfig::UniqueID
>, std::allocator<synfig::Waypoint> > const&, int const&) (impl=0x555558d8b050, _A_a1=..., _A_a2=..., _
A_a3=@0x7fffffffd100: 3) at /usr/include/sigc++-2.0/sigc++/signal.h:1562
#12 0x0000555555e565f8 in sigc::signal3<void, synfigapp::ValueDesc, std::set<synfig::Waypoint, std::les
s<synfig::UniqueID>, std::allocator<synfig::Waypoint> >, int, sigc::nil>::emit(synfigapp::ValueDesc con
st&, std::set<synfig::Waypoint, std::less<synfig::UniqueID>, std::allocator<synfig::Waypoint> > const&,
int const&) const (this=0x5555566d1a10, _A_a1=..., _A_a2=..., _A_a3=@0x7fffffffd100: 3) at /usr/includ
e/sigc++-2.0/sigc++/signal.h:3263                                                                       
#13 0x0000555556128bd2 in studio::Widget_Timetrack::on_waypoint_clicked(studio::Widget_Timetrack::Waypo
intItem const&, unsigned int, Gdk::Point) (this=0x5555566d1700, wi=..., button=3) at /home/gregory/Synf
ig_Projects/Synfig_Builds/synfig/synfig-studio/src/gui/widgets/widget_timetrack.cpp:843                 
#14 0x0000555556140d3a in sigc::bound_mem_functor3<void, studio::Widget_Timetrack, studio::Widget_Timet
rack::WaypointItem const&, unsigned int, Gdk::Point>::operator()(studio::Widget_Timetrack::WaypointItem
const&, unsigned int const&, Gdk::Point const&) const (this=0x555558d89458, _A_a1=..., _A_a2=@0x555558
b90684: 3, _A_a3=...) at /usr/include/sigc++-2.0/sigc++/functors/mem_fun.h:2222
#15 0x000055555613f160 in sigc::adaptor_functor<sigc::bound_mem_functor3<void, studio::Widget_Timetrack
, studio::Widget_Timetrack::WaypointItem const&, unsigned int, Gdk::Point> >::operator()<studio::Widget
_Timetrack::WaypointItem const&, unsigned int const&, Gdk::Point const&>(studio::Widget_Timetrack::Wayp
ointItem const&, unsigned int const&, Gdk::Point const&) const (this=0x555558d89450, _A_arg1=..., _A_ar
g2=@0x555558b90684: 3, _A_arg3=...) at /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:128
#16 0x000055555613be78 in sigc::internal::slot_call<sigc::bound_mem_functor3<void, studio::Widget_Timet
rack, studio::Widget_Timetrack::WaypointItem const&, unsigned int, Gdk::Point>, void, studio::Widget_Ti
metrack::WaypointItem const&, unsigned int, Gdk::Point>::call_it(sigc::internal::slot_rep*, studio::Wid
get_Timetrack::WaypointItem const&, unsigned int const&, Gdk::Point const&) (rep=0x555558d89420, a_#0=.
.., a_#1=@0x555558b90684: 3, a_#2=...) at /usr/include/sigc++-2.0/sigc++/functors/slot.h:451
#17 0x000055555613e3a0 in sigc::internal::signal_emit3<void, studio::Widget_Timetrack::WaypointItem con
st&, unsigned int, Gdk::Point, sigc::nil>::emit(sigc::internal::signal_impl*, studio::Widget_Timetrack:
:WaypointItem const&, unsigned int const&, Gdk::Point const&) (impl=0x555558d894b0, _A_a1=..., _A_a2=@0
x555558b90684: 3, _A_a3=...) at /usr/include/sigc++-2.0/sigc++/signal.h:1562
#18 0x000055555613a810 in sigc::signal3<void, studio::Widget_Timetrack::WaypointItem const&, unsigned i
nt, Gdk::Point, sigc::nil>::emit(studio::Widget_Timetrack::WaypointItem const&, unsigned int const&, Gd
k::Point const&) const (this=0x5555566d1900, _A_a1=..., _A_a2=@0x555558b90684: 3, _A_a3=...) at /usr/in
clude/sigc++-2.0/sigc++/signal.h:3263                                                                   
#19 0x0000555556136ce4 in studio::SelectDragHelper<studio::Widget_Timetrack::WaypointItem>::process_but
ton_press_event(_GdkEventButton*) (this=0x5555566d1750, event=0x555558b90650) at /home/gregory/Synfig_P
rojects/Synfig_Builds/synfig/synfig-studio/src/gui/selectdraghelper.h:598                               
#20 0x00005555561333f5 in studio::SelectDragHelper<studio::Widget_Timetrack::WaypointItem>::process_eve
nt(_GdkEvent*) (this=0x5555566d1750, event=0x555558b90650) at /home/gregory/Synfig_Projects/Synfig_Buil
ds/synfig/synfig-studio/src/gui/selectdraghelper.h:373                                                  
#21 0x000055555612427d in studio::Widget_Timetrack::on_event(_GdkEvent*) (this=0x5555566d1700, event=0x
555558b90650) at /home/gregory/Synfig_Projects/Synfig_Builds/synfig/synfig-studio/src/gui/widgets/widge
t_timetrack.cpp:346                                                                                     
#22 0x00007ffff64c7bc9 in Gtk::Widget_Class::event_callback(_GtkWidget*, _GdkEvent*) () at /lib/x86_64-
linux-gnu/libgtkmm-3.0.so.1                                                                             
#23 0x00007ffff59c75ef in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#24 0x00007ffff5339a56 in  () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#25 0x00007ffff5357df1 in g_signal_emit_valist () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#26 0x00007ffff53590f3 in g_signal_emit () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#27 0x00007ffff5971bb9 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#28 0x00007ffff582d128 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#29 0x00007ffff582f3db in gtk_main_do_event () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#30 0x00007ffff5517f79 in  () at /lib/x86_64-linux-gnu/libgdk-3.so.0
#31 0x00007ffff554b106 in  () at /lib/x86_64-linux-gnu/libgdk-3.so.0
#32 0x00007ffff524c17d in g_main_context_dispatch () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#33 0x00007ffff524c400 in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#34 0x00007ffff524c6f3 in g_main_loop_run () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#35 0x00007ffff582e37d in gtk_main () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#36 0x0000555555d3a4d5 in main(int, char**) (argc=0, argv=0x7fffffffdf58) at /home/gregory/Synfig_Proje
cts/Synfig_Builds/synfig/synfig-studio/src/gui/main.cpp:134
1 Like

OK.

This error/crash only happens on debug builds. That’s why I couldn’t reproduce it.
It is triggered when you open the Waypoint Dialog on debug build.

The fix is here.

1 Like

Nice Job! Thanks for the help.