The xfce panel from SVN (from today's revision 20833) dies with a core dump when removing a launcher Steps to reproduce: 1) Move a launcher from a panel to anothe rone a couple of times 2) Remove the launcher by dragging it back to the "Add items" dialog 3) The panel crashes. GDB backtrace follows: (gdb) bt #0 0x00002ae2be24be77 in free () from /lib/libc.so.6 #1 0x00002ae2be24da22 in calloc () from /lib/libc.so.6 #2 0x00002ae2be07d420 in g_malloc0 () from /usr/lib/libglib-2.0.so.0 #3 0x00002ae2be074245 in g_source_new () from /usr/lib/libglib-2.0.so.0 #4 0x00002ae2be077ad2 in g_timeout_source_new () from /usr/lib/libglib-2.0.so.0 #5 0x00002ae2be077b35 in g_timeout_add_full () from /usr/lib/libglib-2.0.so.0 #6 0x000000000040a4f1 in panel_app_queue_save () at panel-app.c:650 #7 0x00002ae2bdd12910 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #8 0x00002ae2bdd21af2 in g_signal_stop_emission () from /usr/lib/libgobject-2.0.so.0 #9 0x00002ae2bdd22fcc in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 #10 0x00002ae2bdd23383 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0 #11 0x00002ae2bc59b703 in gtk_object_destroy () from /usr/lib/libgtk-x11-2.0.so.0 #12 0x00002ae2bdd15b90 in g_object_run_dispose () from /usr/lib/libgobject-2.0.so.0 #13 0x00000000004128c6 in _panel_drag_data_delete ( widget=<value optimized out>, drag_context=<value optimized out>, panel=<value optimized out>) at panel.c:605 #14 0x00002ae2bdd12910 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #15 0x00002ae2bdd21af2 in g_signal_stop_emission () ---Type <return> to continue, or q <return> to quit--- from /usr/lib/libgobject-2.0.so.0 #16 0x00002ae2bdd22fcc in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 #17 0x00002ae2bdd2682d in g_signal_emit_by_name () from /usr/lib/libgobject-2.0.so.0 #18 0x00002ae2bc510296 in _gtk_drag_source_handle_event () from /usr/lib/libgtk-x11-2.0.so.0 #19 0x00002ae2bdd12910 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #20 0x00002ae2bdd21af2 in g_signal_stop_emission () from /usr/lib/libgobject-2.0.so.0 #21 0x00002ae2bdd22fcc in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 #22 0x00002ae2bdd2682d in g_signal_emit_by_name () from /usr/lib/libgobject-2.0.so.0 #23 0x00002ae2bc5bfcab in _gtk_selection_notify () from /usr/lib/libgtk-x11-2.0.so.0 #24 0x00002ae2bc5bff55 in gtk_selection_convert () from /usr/lib/libgtk-x11-2.0.so.0 #25 0x00002ae2bc50bfd2 in gtk_drag_finish () from /usr/lib/libgtk-x11-2.0.so.0 #26 0x00002ae2bc580bfb in _gtk_marshal_VOID__OBJECT_INT_INT_BOXED_UINT_UINT () from /usr/lib/libgtk-x11-2.0.so.0 #27 0x00002ae2bdd12910 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #28 0x00002ae2bdd21af2 in g_signal_stop_emission () ---Type <return> to continue, or q <return> to quit--- from /usr/lib/libgobject-2.0.so.0 #29 0x00002ae2bdd22fcc in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 #30 0x00002ae2bdd2682d in g_signal_emit_by_name () from /usr/lib/libgobject-2.0.so.0 #31 0x00002ae2bc50c91b in gtk_drag_dest_find_target () from /usr/lib/libgtk-x11-2.0.so.0 #32 0x00002ae2bdd12910 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #33 0x00002ae2bdd21af2 in g_signal_stop_emission () from /usr/lib/libgobject-2.0.so.0 #34 0x00002ae2bdd22fcc in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 #35 0x00002ae2bdd2682d in g_signal_emit_by_name () from /usr/lib/libgobject-2.0.so.0 #36 0x00002ae2bc5bf7b5 in gtk_selection_clear () from /usr/lib/libgtk-x11-2.0.so.0 #37 0x00002ae2bc5bff73 in gtk_selection_convert () from /usr/lib/libgtk-x11-2.0.so.0 #38 0x000000000040edeb in treeview_drag_drop (widget=0x590e00, context=0xb01cf0, x=<value optimized out>, y=<value optimized out>, time=2236859787, user_data=<value optimized out>) at panel-dialogs.c:340 #39 0x00002ae2bc57ec0a in _gtk_marshal_BOOLEAN__OBJECT_INT_INT_UINT () from /usr/lib/libgtk-x11-2.0.so.0 ---Type <return> to continue, or q <return> to quit--- #40 0x00002ae2bdd12910 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #41 0x00002ae2bdd21af2 in g_signal_stop_emission () from /usr/lib/libgobject-2.0.so.0 #42 0x00002ae2bdd22d0c in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 #43 0x00002ae2bdd2682d in g_signal_emit_by_name () from /usr/lib/libgobject-2.0.so.0 #44 0x00002ae2bc510697 in _gtk_drag_source_handle_event () from /usr/lib/libgtk-x11-2.0.so.0 #45 0x00002ae2bc50e21f in gtk_drag_set_default_icon () from /usr/lib/libgtk-x11-2.0.so.0 #46 0x00002ae2bc50e262 in gtk_drag_set_default_icon () from /usr/lib/libgtk-x11-2.0.so.0 #47 0x00002ae2bc50e262 in gtk_drag_set_default_icon () from /usr/lib/libgtk-x11-2.0.so.0 #48 0x00002ae2bc50e262 in gtk_drag_set_default_icon () from /usr/lib/libgtk-x11-2.0.so.0 #49 0x00002ae2bc50e262 in gtk_drag_set_default_icon () from /usr/lib/libgtk-x11-2.0.so.0 #50 0x00002ae2bc50e395 in _gtk_drag_dest_handle_event () from /usr/lib/libgtk-x11-2.0.so.0 #51 0x00002ae2bc57cf6a in gtk_main_do_event () from /usr/lib/libgtk-x11-2.0.so.0 ---Type <return> to continue, or q <return> to quit--- #52 0x00002ae2bc9e32ac in _gdk_events_queue () from /usr/lib/libgdk-x11-2.0.so.0 #53 0x00002ae2be075b9d in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0 #54 0x00002ae2be078e65 in g_main_context_check () from /usr/lib/libglib-2.0.so.0 #55 0x00002ae2be07912a in g_main_loop_run () from /usr/lib/libglib-2.0.so.0 #56 0x00002ae2bc57c2e2 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0 #57 0x000000000040a291 in panel_app_run (argc=5644576, argv=0x1) at panel-app.c:612 #58 0x00000000004098a5 in main (argc=1, argv=0x7ffffffeb838) at main.c:167
Hi, that's a pretty big backtrace and I don't really see what is going on there. At first glance it looks like a glib error: #0 0x00002ae2be24be77 in free () from /lib/libc.so.6 #1 0x00002ae2be24da22 in calloc () from /lib/libc.so.6 #2 0x00002ae2be07d420 in g_malloc0 () from /usr/lib/libglib-2.0.so.0 #3 0x00002ae2be074245 in g_source_new () from /usr/lib/libglib-2.0.so.0 #4 0x00002ae2be077ad2 in g_timeout_source_new () from /usr/lib/libglib-2.0.so.0 #5 0x00002ae2be077b35 in g_timeout_add_full () from /usr/lib/libglib-2.0.so.0 #6 0x000000000040a4f1 in panel_app_queue_save () at panel-app.c:650 #7 0x00002ae2bdd12910 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 The crash is in g_malloc, but perhaps there is some memory corruption with the drag and drop stuff... I need to have a closer look at that. Other ideas are welcome ;-)
I could have a look at the code if you tell me where to start (I'm not too familiar with the new panel code).
Created attachment 499 Fix a memory error Dunno if that fixes the issue definitely, but it's still a fairly serious fix IMHO.
Ok, I've commited my patch because: - It's an obvious memory management bug - It can't break things - It seems to fix the issue, I can't reproduce the crash anymore. I hope you don't mind ;)
(In reply to comment #4) > Ok, I've commited my patch because: > - It's an obvious memory management bug > - It can't break things > - It seems to fix the issue, I can't reproduce the crash anymore. > > I hope you don't mind ;) > Hehe, by all means, go ahead and fix my bugs. Thanks!