(fix) 0.64.1 Dev - Playing animation, hitting ALT= segfault!

Hello,
[EDIT 6/09] Fixed
when or after playing an animation, hitting ALT focusing on canevas windows cause synfig a segfault
is it hurting just me ?

debian 7 / xfce 4.10 / Development version: Revision: 20130902 / Branch: master / Revision ID: 427899 / Built on Sep 3 2013

reproduced here.

Process:         synfigstudio [1880]
Path:            /Applications/SynfigStudio.app/Contents/MacOS/SynfigStudio
Identifier:      synfigstudio
Version:         ??? (???)
Code Type:       X86-64 (Native)
Parent Process:  launchd [156]

Date/Time:       2013-09-04 20:29:34.928 +0800
OS Version:      Mac OS X 10.7.5 (11G63b)
Report Version:  9

Interval Since Last Report:          2459016 sec
Crashes Since Last Report:           280
Per-App Crashes Since Last Report:   210
Anonymous UUID:                      5477F283-5DBE-45B7-A77E-2F990B531192

Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000

VM Regions Near 0:
--> 
    __TEXT                 0000000100000000-000000010065b000 [ 6508K] r-x/rwx SM=COW  /Applications/SynfigStudio.app/Contents/Resources/synfig/bin/synfigstudio

Application Specific Information:
objc[1880]: garbage collection is OFF

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libgtkmm-2.4.1.dylib          	0x0000000101e9c2a2 Gtk::Widget::event(_GdkEvent*) + 4
1   synfigstudio                  	0x00000001002fc07a studio::CanvasView::on_key_press_event(_GdkEventKey*) + 120
2   libgtkmm-2.4.1.dylib          	0x0000000101e988bb Gtk::Widget_Class::key_press_event_callback(_GtkWidget*, _GdkEventKey*) + 103
3   libgtk-x11-2.0.0.dylib        	0x00000001025a6f9a _gtk_marshal_BOOLEAN__BOXED + 169
4   libgobject-2.0.0.dylib        	0x00000001030fd50c g_closure_invoke + 399
5   libgobject-2.0.0.dylib        	0x000000010310fe8e signal_emit_unlocked_R + 4569
6   libgobject-2.0.0.dylib        	0x00000001031117f9 g_signal_emit_valist + 4044
7   libgobject-2.0.0.dylib        	0x0000000103111c1b g_signal_emit + 148
8   libgtk-x11-2.0.0.dylib        	0x00000001026a01f0 gtk_widget_event_internal + 713
9   libgtk-x11-2.0.0.dylib        	0x00000001025a06ee gtk_propagate_event + 262
10  libgtk-x11-2.0.0.dylib        	0x00000001025a16db gtk_main_do_event + 1215
11  libgdk-x11-2.0.0.dylib        	0x000000010298d368 gdk_event_dispatch + 84
12  libglib-2.0.0.dylib           	0x000000010329ed1c g_main_context_dispatch + 304
13  libglib-2.0.0.dylib           	0x00000001032a12af g_main_context_iterate + 389
14  libglib-2.0.0.dylib           	0x00000001032a1485 g_main_context_iteration + 65
15  libgtk-x11-2.0.0.dylib        	0x00000001025a17fc gtk_main_iteration_do + 37
16  libgtkmm-2.4.1.dylib          	0x0000000101e3097f Gtk::Main::iteration_impl(bool) + 13
17  libgtkmm-2.4.1.dylib          	0x0000000101e30908 Gtk::Main::iteration(bool) + 22
18  synfigstudio                  	0x00000001002f7b4b studio::CanvasView::play() + 1303
19  synfigstudio                  	0x00000001002f7c7f studio::CanvasView::on_play_pause_pressed() + 65
20  synfigstudio                  	0x000000010031f3ba sigc::bound_mem_functor0<void, studio::CanvasView>::operator()() const + 110
21  synfigstudio                  	0x000000010031f3d5 sigc::adaptor_functor<sigc::bound_mem_functor0<void, studio::CanvasView> >::operator()() const + 25
22  synfigstudio                  	0x000000010031f48b sigc::internal::slot_call0<sigc::bound_mem_functor0<void, studio::CanvasView>, void>::call_it(sigc::internal::slot_rep*) + 33
23  libglibmm-2.4.1.dylib         	0x00000001024301e2 Glib::SignalProxyNormal::slot0_void_callback(_GObject*, void*) + 66
24  libgobject-2.0.0.dylib        	0x00000001030fd50c g_closure_invoke + 399
25  libgobject-2.0.0.dylib        	0x000000010310ffcb signal_emit_unlocked_R + 4886
26  libgobject-2.0.0.dylib        	0x0000000103111799 g_signal_emit_valist + 3948
27  libgobject-2.0.0.dylib        	0x0000000103111c1b g_signal_emit + 148
28  libgtk-x11-2.0.0.dylib        	0x0000000102509b0b gtk_real_button_released + 52
29  libgobject-2.0.0.dylib        	0x00000001030fd2c3 _g_closure_invoke_va + 433
30  libgobject-2.0.0.dylib        	0x0000000103110ce0 g_signal_emit_valist + 1203
31  libgobject-2.0.0.dylib        	0x0000000103111c1b g_signal_emit + 148
32  libgtk-x11-2.0.0.dylib        	0x000000010250733e gtk_button_button_release + 15
33  libgtk-x11-2.0.0.dylib        	0x00000001025a6f9a _gtk_marshal_BOOLEAN__BOXED + 169
34  libgobject-2.0.0.dylib        	0x00000001030fd50c g_closure_invoke + 399
35  libgobject-2.0.0.dylib        	0x000000010310fe8e signal_emit_unlocked_R + 4569
36  libgobject-2.0.0.dylib        	0x00000001031117f9 g_signal_emit_valist + 4044
37  libgobject-2.0.0.dylib        	0x0000000103111c1b g_signal_emit + 148
38  libgtk-x11-2.0.0.dylib        	0x00000001026a01f0 gtk_widget_event_internal + 713
39  libgtk-x11-2.0.0.dylib        	0x00000001025a0714 gtk_propagate_event + 300
40  libgtk-x11-2.0.0.dylib        	0x00000001025a16db gtk_main_do_event + 1215
41  libgdk-x11-2.0.0.dylib        	0x000000010298d368 gdk_event_dispatch + 84
42  libglib-2.0.0.dylib           	0x000000010329ed1c g_main_context_dispatch + 304
43  libglib-2.0.0.dylib           	0x00000001032a12af g_main_context_iterate + 389
44  libglib-2.0.0.dylib           	0x00000001032a141b g_main_loop_run + 327
45  libgtk-x11-2.0.0.dylib        	0x00000001025a199e gtk_main + 163
46  synfigstudio                  	0x0000000100026eba main + 1661
47  synfigstudio                  	0x0000000100026698 start + 52

Thread 1:: Dispatch queue: com.apple.libdispatch-manager
0   libsystem_kernel.dylib        	0x00007fff913bb7e6 kevent + 10
1   libdispatch.dylib             	0x00007fff91398786 _dispatch_mgr_invoke + 923
2   libdispatch.dylib             	0x00007fff91397316 _dispatch_mgr_thread + 54

Thread 2:
...

my turn of stack call ;

Thread 1 (Thread 0xb5fdd880 (LWP 4338)): #0 0xb766625b in Gtk::Widget::event(_GdkEvent*) () from /usr/lib/libgtkmm-2.4.so.1 #1 0x0860cfb8 in studio::CanvasView::on_key_press_event (this=0x8f59918, event=0x9088b38) at canvasview.cpp:2459 #2 0xb7661734 in Gtk::Widget_Class::key_press_event_callback(_GtkWidget*, _GdkEventKey*) () from /usr/lib/libgtkmm-2.4.so.1 #3 0xb6ece8a2 in ?? () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 #4 0xb6803acd in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #5 0xb6804c56 in g_closure_invoke () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #6 0xb6816b36 in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #7 0xb681ed73 in g_signal_emit_valist () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #8 0xb681f2b3 in g_signal_emit () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #9 0xb7005dab in ?? () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 #10 0xb6ecca7c in gtk_propagate_event () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 #11 0xb6eccd38 in gtk_main_do_event () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 #12 0xb6c9dae8 in ?? () from /usr/lib/i386-linux-gnu/libgdk-x11-2.0.so.0 #13 0xb673a483 in g_main_context_dispatch () from /lib/i386-linux-gnu/libglib-2.0.so.0 #14 0xb673a820 in ?? () from /lib/i386-linux-gnu/libglib-2.0.so.0 #15 0xb673a901 in g_main_context_iteration () from /lib/i386-linux-gnu/libglib-2.0.so.0 #16 0xb6ecbd91 in gtk_main_iteration_do () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 #17 0xb75da1fc in Gtk::Main::iteration_impl(bool) () from /usr/lib/libgtkmm-2.4.so.1 #18 0xb75daea8 in Gtk::Main::iteration(bool) () from /usr/lib/libgtkmm-2.4.so.1 #19 0x08610b90 in studio::CanvasView::play (this=0x8f59918) at canvasview.cpp:3286 #20 0x0861b900 in studio::CanvasView::on_play_pause_pressed (this=0x8f59918) at canvasview.cpp:4217 #21 0x0862ce4c in sigc::bound_mem_functor0<void, studio::CanvasView>::operator() (this=0x8ff268c) at /usr/include/sigc++-2.0/sigc++/functors/mem_fun.h:1787 #22 0x0862a460 in sigc::adaptor_functor<sigc::bound_mem_functor0<void, studio::CanvasView> >::operator() (this=0x8ff2688) at /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:251 #23 0x08627086 in sigc::internal::slot_call0<sigc::bound_mem_functor0<void, studio::CanvasView>, void>::call_it (rep=0x8ff2670) at /usr/include/sigc++-2.0/sigc++/functors/slot.h:103 #24 0xb6d6ce53 in Glib::SignalProxyNormal::slot0_void_callback(_GObject*, void*) () from /usr/lib/i386-linux-gnu/libglibmm-2.4.so.1 #25 0xb68069cf in g_cclosure_marshal_VOID__VOID () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #26 0xb6804c56 in g_closure_invoke () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #27 0xb68171c2 in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #28 0xb681f0db in g_signal_emit_valist () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #29 0xb681f2b3 in g_signal_emit () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #30 0xb6e0f53a in gtk_button_clicked () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 #31 0xb6e10940 in ?? () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 #32 0xb758ed7d in Gtk::Button_Class::released_callback(_GtkButton*) () from /usr/lib/libgtkmm-2.4.so.1 #33 0xb6806a1a in g_cclosure_marshal_VOID__VOIDv () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #34 0xb6803587 in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #35 0xb6804f01 in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #36 0xb681e6fe in g_signal_emit_valist () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #37 0xb681f2b3 in g_signal_emit () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #38 0xb6e0f45a in gtk_button_released () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 #39 0xb6e0f4a4 in ?? () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 #40 0xb7661b95 in Gtk::Widget_Class::button_release_event_callback(_GtkWidget*, _GdkEventButton*) () from /usr/lib/libgtkmm-2.4.so.1 #41 0xb6ece8a2 in ?? () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 #42 0xb6803acd in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #43 0xb6804c56 in g_closure_invoke () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #44 0xb6816b36 in ?? () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #45 0xb681ed73 in g_signal_emit_valist () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #46 0xb681f2b3 in g_signal_emit () from /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 #47 0xb7005dab in ?? () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 #48 0xb6ecc9a4 in gtk_propagate_event () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 #49 0xb6eccd38 in gtk_main_do_event () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 #50 0xb6c9dae8 in ?? () from /usr/lib/i386-linux-gnu/libgdk-x11-2.0.so.0 #51 0xb673a483 in g_main_context_dispatch () from /lib/i386-linux-gnu/libglib-2.0.so.0 #52 0xb673a820 in ?? () from /lib/i386-linux-gnu/libglib-2.0.so.0 #53 0xb673acfb in g_main_loop_run () from /lib/i386-linux-gnu/libglib-2.0.so.0 #54 0xb6ecbad0 in gtk_main () from /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 #55 0xb75da264 in Gtk::Main::run_impl() () from /usr/lib/libgtkmm-2.4.so.1 #56 0xb75dac9f in Gtk::Main::run() () from /usr/lib/libgtkmm-2.4.so.1 #57 0x083c6b02 in main (argc=0, argv=0xbffffb04) at main.cpp:108

Yes, it breaks for me too. Fedora 19 KDE with Development version:

Revision: 20130826
Branch: master
Revision ID: 034175

Built on Aug 26 2013

Built with:
ETL 0.04.16
Synfig API (006000)
Synfig library 47
GTK+ 2.16.6
GNU G++ 4.1.2

Using:
Synfig 0.64.0
GTK+ 2.24.19

Reproduced here too, Windows version 32 bits, in-house development snapshot.

By the backtrace you have reported it looks like there is a null pointer at the following member:

bool CanvasView::on_key_press_event(GdkEventKey* event) { Gtk::Widget* focused_widget = get_focus(); if(focused_widget_has_priority(focused_widget)) { if(focused_widget->event((GdkEvent*)event)) return true; } else if(Gtk::Window::on_key_press_event(event)) return true; else return focused_widget->event((GdkEvent*)event); return false; }

focused_widget is null and it is not checked before used.
Anyone to send a patch for this? :wink:

By the way, I think it was me who added that code to the CanvasView some time ago, so you can blame on me for that! :slight_smile:
… but please, keep calm and code Synfig.
-G

I wait to say “i can take a look” i start to have experience in null pointer test…
but after get_window hunt.

bouh… i blame you because you dedicate too much to improve that things ! you own major part of bugs because you own major part of improvements … bouhhh :stuck_out_tongue: