After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 690118 - Crash when closing last tab of a window using Ctrl-w
Crash when closing last tab of a window using Ctrl-w
Status: RESOLVED FIXED
Product: glib
Classification: Platform
Component: general
unspecified
Other Linux
: Normal normal
: ---
Assigned To: gtkdev
gtkdev
: 689919 691306 (view as bug list)
Depends on:
Blocks:
 
 
Reported: 2012-12-12 19:15 UTC by Gustavo Noronha (kov)
Modified: 2013-01-17 14:00 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
Patch (843 bytes, patch)
2012-12-12 19:16 UTC, Gustavo Noronha (kov)
reviewed Details | Review
Misc mangling of dispose for the lols (2.79 KB, patch)
2012-12-12 19:17 UTC, Gustavo Noronha (kov)
none Details | Review
refcounting steps before the free and NULL dereference (60.03 KB, text/plain)
2013-01-08 19:24 UTC, Alban Browaeys
  Details
group refcount lifecycle the closure is attached to (38.84 KB, text/plain)
2013-01-08 21:22 UTC, Alban Browaeys
  Details
small demo program (2.11 KB, text/plain)
2013-01-16 20:27 UTC, Allison Karlitskaya (desrt)
  Details
gtkaccelgroup: ref the action and actiongroup before activating (3.01 KB, patch)
2013-01-16 23:47 UTC, Alban Browaeys
none Details | Review
signal: do not set the sequential number to 0 on disconnect. (1.10 KB, patch)
2013-01-16 23:54 UTC, Alban Browaeys
none Details | Review
gsignal: fix closure invalidation code (3.48 KB, patch)
2013-01-17 04:04 UTC, Allison Karlitskaya (desrt)
committed Details | Review

Description Gustavo Noronha (kov) 2012-12-12 19:15:20 UTC
Program received signal SIGSEGV, Segmentation fault.
invalid_closure_notify (instance=0x8f2a80, closure=0x7b70a0) at gsignal.c:3741
3741	  handler_unref_R (signal_id, instance, handler);
  • #0 invalid_closure_notify
    at gsignal.c line 3741
  • #1 closure_invoke_notifiers
    at gclosure.c line 264
  • #2 g_closure_invalidate
    at gclosure.c line 562
  • #3 destroy_closure_array
    at gobject.c line 3785
  • #4 g_object_real_dispose
    at gobject.c line 1012
  • #5 g_object_unref
    at gobject.c line 2987
  • #6 closure_invoke_notifiers
    at gclosure.c line 285
  • #7 g_closure_invoke
    at gclosure.c line 783
  • #8 signal_emit_unlocked_R
    at gsignal.c line 3567
  • #9 g_signal_emit_valist
    at gsignal.c line 3325
  • #10 g_signal_emit
    at gsignal.c line 3371
  • #11 gtk_accel_group_activate
    at gtkaccelgroup.c line 914
  • #12 gtk_accel_groups_activate
    at gtkaccelgroup.c line 952

Comment 1 Gustavo Noronha (kov) 2012-12-12 19:16:52 UTC
Created attachment 231408 [details] [review]
Patch
Comment 2 Gustavo Noronha (kov) 2012-12-12 19:17:22 UTC
Created attachment 231410 [details] [review]
Misc mangling of dispose for the lols
Comment 3 Gustavo Noronha (kov) 2012-12-12 19:18:07 UTC
FWIW, it seems to be unrelated to bug 689919.
Comment 4 Claudio Saavedra 2012-12-13 10:07:55 UTC
Review of attachment 231408 [details] [review]:

::: src/ephy-window.c
@@ +3486,3 @@
+		gtk_window_remove_accel_group (GTK_WINDOW (window),
+					       gtk_ui_manager_get_accel_group (priv->manager));
+

Why do we need to do this at all? Shouldn't GTK+ take care of it?
Comment 5 Claudio Saavedra 2012-12-13 10:24:55 UTC
I'll move this to GTK+. It's silly to think that all apps adding a accel group need to manually remove it in dispose. If anything, this should be done in gtk_window_dispose().
Comment 6 Gustavo Noronha (kov) 2012-12-13 11:12:11 UTC
Looks like I'm wrong, and this is indeed another instance of bug 689919. I was bisecting gtk+ with no success, then I tried going back to before the closure changes in glib, and it stopped crashing.
Comment 7 Gustavo Noronha (kov) 2012-12-14 12:51:56 UTC
And yeah, by reverting all of the closure invalidation commits up to and including "[gsignal] disconnect invalidated closures" I get rid of the crash (for that only desrt commits need to be reverted) and assertions.
Comment 8 Xan Lopez 2013-01-08 15:34:46 UTC
*** Bug 691306 has been marked as a duplicate of this bug. ***
Comment 9 Xan Lopez 2013-01-08 15:35:10 UTC
*** Bug 689919 has been marked as a duplicate of this bug. ***
Comment 10 Xan Lopez 2013-01-08 15:36:36 UTC
Ryan? People keep reporting this bug and it seems that it is indeed caused by a patch of yours.
Comment 11 Alban Browaeys 2013-01-08 17:49:04 UTC
Note that the crash goes away if one removes :
handler->has_invalid_closure_notify  = 0;
in glib invalid_closure_notify and uses remove_invalid_closure_notify instead.
But critical warnings ensue (which are not visible in the UI , ie no crash still references
leaks.
(epiphany:19148): GLib-GObject-CRITICAL **: handler_unref_R: assertion
`handler->ref_count > 0' failed
and a:
(epiphany:19148): GLib-GObject-WARNING **:
/home/prahal/checkout/gnome/glib/gobject/gclosure.c:697: unable to
remove uninstalled invalidation notifier: 0x7ffff1025dad
(0x7fff7801f000)


I made a rough summary of my workaroud in bug
691306 . Though I admit my patches was not much better than a simple workaround.
Also if the accelgroup is removed before the ui manager is finalized in ephy_window_dispose
the issue will be hidden the same way as with moving the ui manager finalize in ephy_window_finalize
(the accelgroup will be removed before ui manager fnalization).

My quest ended at ui manager finalization which ends up removing the signal handler for accel "<Primary>w" at

 (gdb) bt
  • #0 g_signal_handlers_disconnect_matched
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 2869
  • #1 quick_accel_remove
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 556
  • #2 gtk_accel_group_disconnect
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 724
  • #3 gtk_action_disconnect_accelerator
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaction.c line 1807
  • #4 gtk_menu_item_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenuitem.c line 622
  • #5 g_object_run_dispose
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 1062
  • #6 gtk_widget_destroy
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 3984
  • #7 gtk_menu_shell_forall
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenushell.c line 1206
  • #8 gtk_container_foreach
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkcontainer.c line 2062
  • #9 gtk_container_destroy
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkcontainer.c line 1378
  • #10 gtk_menu_destroy
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenu.c line 1153
  • #11 g_cclosure_marshal_VOID__VOID
    at /home/prahal/checkout/gnome/glib/gobject/gmarshal.c line 85
  • #12 g_type_class_meta_marshal
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 970
  • #13 g_closure_invoke
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 777
  • #14 signal_emit_unlocked_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3683
  • #15 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3315
  • #16 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #17 gtk_widget_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 10341
  • #18 gtk_menu_shell_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenushell.c line 535
  • #19 g_object_unref
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 2987
  • #20 g_cclosure_marshal_VOID__OBJECTv
    at /home/prahal/checkout/gnome/glib/gobject/gmarshal.c line 1316
  • #21 g_type_class_meta_marshalv
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 997
  • #22 _g_closure_invoke_va
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 840
  • #23 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3226
  • #24 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #25 gtk_container_remove
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkcontainer.c line 1547
  • #26 gtk_widget_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 10330
  • #27 gtk_menu_shell_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenushell.c line 535
  • #28 g_object_unref
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 2987
  • #29 free_node
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkuimanager.c line 1404
  • #30 g_node_traverse_post_order
    at /home/prahal/checkout/gnome/glib/glib/gnode.c line 615
  • #31 g_node_traverse_post_order
    at /home/prahal/checkout/gnome/glib/glib/gnode.c line 610
  • #32 g_node_traverse
    at /home/prahal/checkout/gnome/glib/glib/gnode.c line 875
  • #33 gtk_ui_manager_finalize
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkuimanager.c line 680
  • #34 g_object_unref
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 3024
  • #35 ephy_window_dispose
    at /home/prahal/checkout/gnome/epiphany/src/ephy-window.c line 3467
  • #36 g_object_run_dispose
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 1062
  • #37 gtk_widget_destroy
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 3984
  • #38 notebook_page_close_request_cb
    at /home/prahal/checkout/gnome/epiphany/src/ephy-window.c line 3225
  • #39 g_cclosure_marshal_VOID__OBJECTv
    at /home/prahal/checkout/gnome/glib/gobject/gmarshal.c line 1312
  • #40 _g_closure_invoke_va
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 840
  • #41 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3226
  • #42 g_signal_emit_by_name
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3408
  • #43 window_cmd_file_close_window
    at /home/prahal/checkout/gnome/epiphany/src/window-commands.c line 973
  • #44 g_cclosure_marshal_VOID__VOID
    at /home/prahal/checkout/gnome/glib/gobject/gmarshal.c line 85
  • #45 g_closure_invoke
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 777
  • #46 signal_emit_unlocked_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3567
  • #47 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3315
  • #48 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #49 _gtk_action_emit_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaction.c line 801
  • #50 closure_accel_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaction.c line 1638
  • #51 g_closure_invoke
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 777
  • #52 signal_emit_unlocked_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3567
  • #53 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3325
  • #54 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #55 gtk_accel_group_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 914
  • #56 gtk_accel_groups_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 952
  • #57 gtk_window_activate_key
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwindow.c line 9453
  • #58 gtk_window_key_press_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwindow.c line 6089
  • #59 ephy_window_key_press_event
    at /home/prahal/checkout/gnome/epiphany/src/ephy-window.c line 956
  • #60 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 130
  • #61 g_type_class_meta_marshalv
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 997
  • #62 _g_closure_invoke_va
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 840
  • #63 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3226
  • #64 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #65 gtk_widget_event_internal
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 6308
  • #66 gtk_widget_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 5965
  • #67 propagate_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 2490
  • #68 gtk_propagate_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 2536
  • #69 gtk_main_do_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 1716
  • #70 _gdk_event_emit
    at /home/prahal/checkout/gnome/gtk+/gdk/gdkevents.c line 69
  • #71 gdk_event_source_dispatch
    at /home/prahal/checkout/gnome/gtk+/gdk/x11/gdkeventsource.c line 358
  • #72 g_main_dispatch
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 2784
  • #73 g_main_context_dispatch
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3288
  • #74 g_main_context_iterate
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3359
  • #75 g_main_context_iteration
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3420
  • #76 g_application_run
    at /home/prahal/checkout/gnome/glib/gio/gapplication.c line 1620
  • #77 main
    at /home/prahal/checkout/gnome/epiphany/src/ephy-main.c line 478

I will give it another shot. Thanks for the hint that "references have to be dropped in dispose, not finalize".
The fact that it crashes with the glib patch:
commit a36028f386708bb10d7c3817b5da5201777dc16c
Author: Ryan Lortie <desrt@desrt.ca>
Date:   Sat Oct 13 12:16:32 2012 -0400

    gsignal: really fix closure invalidation
    
    Commit 66b0d95f0ba1939882368b47b01f93289c42ae07 missed this part of the
    patch.

diff --git a/gobject/gsignal.c b/gobject/gsignal.c
index 70167af..de95fcb 100644
--- a/gobject/gsignal.c
+++ b/gobject/gsignal.c
@@ -3737,6 +3737,7 @@ invalid_closure_notify (gpointer  instance,
 
   handler = handler_lookup (instance, 0, closure, &signal_id);
   /* GClosure removes our notifier when we're done */
+  handler->has_invalid_closure_notify = 0;
   handler_unref_R (signal_id, instance, handler);
 
   SIGNAL_UNLOCK ();

is easely fixed by checking the return value from handler_lookup though this would really be a harsh workaround
and render any attempt to fix the reference count issue of the handler quite an achievement .
Comment 12 Alban Browaeys 2013-01-08 19:19:58 UTC
Ref counting steps leading to crash

1) 
Breakpoint 13, g_signal_emit (instance=0x7fff782a1180, signal_id=220, detail=2375) at /home/prahal/checkout/gnome/glib/gobject/gsignal.c:3370
3370	  va_start (var_args, detail);
(gdb) bt
  • #0 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3370
  • #1 gtk_accel_group_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 914
  • #2 gtk_accel_groups_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 952
  • #3 gtk_window_activate_key
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwindow.c line 9453
  • #4 gtk_window_key_press_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwindow.c line 6089
  • #5 ephy_window_key_press_event
    at /home/prahal/checkout/gnome/epiphany/src/ephy-window.c line 958
  • #6 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 130
  • #7 g_type_class_meta_marshalv
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 997
  • #8 _g_closure_invoke_va
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 840
  • #9 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3226
  • #10 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #11 gtk_widget_event_internal
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 6308
  • #12 gtk_widget_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 5965
  • #13 propagate_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 2490
  • #14 gtk_propagate_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 2536
  • #15 gtk_main_do_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 1716
  • #16 _gdk_event_emit
    at /home/prahal/checkout/gnome/gtk+/gdk/gdkevents.c line 69
  • #17 gdk_event_source_dispatch
    at /home/prahal/checkout/gnome/gtk+/gdk/x11/gdkeventsource.c line 358
  • #18 g_main_dispatch
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 2784
  • #19 g_main_context_dispatch
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3288
  • #20 g_main_context_iterate
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3359
  • #21 g_main_context_iteration
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3420
  • #22 g_application_run
    at /home/prahal/checkout/gnome/glib/gio/gapplication.c line 1620
  • #23 main
    at /home/prahal/checkout/gnome/epiphany/src/ephy-main.c line 478
  • #0 handler_ref
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 601
  • #1 handler_match_prepend
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 473
  • #2 handlers_find
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 525
  • #3 signal_handlers_foreach_matched_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 2727
  • #4 g_signal_handlers_disconnect_matched
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 2877
  • #5 quick_accel_remove
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 556
  • #6 gtk_accel_group_disconnect
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 724
  • #7 gtk_action_disconnect_accelerator
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaction.c line 1807
  • #8 gtk_menu_item_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenuitem.c line 622
  • #9 g_object_run_dispose
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 1062
  • #10 gtk_widget_destroy
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 3984
  • #11 gtk_menu_shell_forall
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenushell.c line 1206
  • #12 gtk_container_foreach
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkcontainer.c line 2062
  • #13 gtk_container_destroy
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkcontainer.c line 1378
  • #14 gtk_menu_destroy
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenu.c line 1153
  • #15 g_cclosure_marshal_VOID__VOID
    at /home/prahal/checkout/gnome/glib/gobject/gmarshal.c line 85
  • #16 g_type_class_meta_marshal
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 970
  • #17 g_closure_invoke
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 777
  • #18 signal_emit_unlocked_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3683
  • #19 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3315
  • #20 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #21 gtk_widget_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 10341
  • #22 gtk_menu_shell_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenushell.c line 535
  • #23 g_object_unref
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 2987
  • #24 g_cclosure_marshal_VOID__OBJECTv
    at /home/prahal/checkout/gnome/glib/gobject/gmarshal.c line 1316
  • #25 g_type_class_meta_marshalv
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 997
  • #26 _g_closure_invoke_va
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 840
  • #27 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3226
  • #28 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #29 gtk_container_remove
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkcontainer.c line 1547
  • #30 gtk_widget_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 10330
  • #31 gtk_menu_shell_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenushell.c line 535
  • #32 g_object_unref
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 2987
  • #33 free_node
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkuimanager.c line 1404
  • #34 g_node_traverse_post_order
    at /home/prahal/checkout/gnome/glib/glib/gnode.c line 615
  • #35 g_node_traverse_post_order
    at /home/prahal/checkout/gnome/glib/glib/gnode.c line 610
  • #36 g_node_traverse
    at /home/prahal/checkout/gnome/glib/glib/gnode.c line 875
  • #37 gtk_ui_manager_finalize
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkuimanager.c line 680
  • #38 g_object_unref
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 3024
  • #39 ephy_window_dispose
    at /home/prahal/checkout/gnome/epiphany/src/ephy-window.c line 3487
  • #40 g_object_run_dispose
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 1062
  • #41 gtk_widget_destroy
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 3984
  • #42 notebook_page_close_request_cb
    at /home/prahal/checkout/gnome/epiphany/src/ephy-window.c line 3245
  • #43 g_cclosure_marshal_VOID__OBJECTv
    at /home/prahal/checkout/gnome/glib/gobject/gmarshal.c line 1312
  • #44 _g_closure_invoke_va
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 840
  • #45 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3226
  • #46 g_signal_emit_by_name
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3408
  • #47 window_cmd_file_close_window
    at /home/prahal/checkout/gnome/epiphany/src/window-commands.c line 973
  • #48 g_cclosure_marshal_VOID__VOID
    at /home/prahal/checkout/gnome/glib/gobject/gmarshal.c line 85
  • #49 g_closure_invoke
  • #50 signal_emit_unlocked_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3567
  • #51 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3315
  • #52 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #53 _gtk_action_emit_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaction.c line 801
  • #54 closure_accel_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaction.c line 1638
  • #55 g_closure_invoke
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 777
  • #56 signal_emit_unlocked_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3567
  • #57 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3325
  • #58 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #59 gtk_accel_group_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 914
  • #60 gtk_accel_groups_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 952
  • #61 gtk_window_activate_key
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwindow.c line 9453
  • #62 gtk_window_key_press_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwindow.c line 6089
  • #63 ephy_window_key_press_event
    at /home/prahal/checkout/gnome/epiphany/src/ephy-window.c line 958
  • #64 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 130
  • #65 g_type_class_meta_marshalv
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 997
  • #66 _g_closure_invoke_va
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 840
  • #67 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3226
  • #68 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #69 gtk_widget_event_internal
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 6308
  • #70 gtk_widget_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 5965
  • #71 propagate_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 2490
  • #72 gtk_propagate_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 2536
  • #73 gtk_main_do_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 1716
  • #74 _gdk_event_emit
    at /home/prahal/checkout/gnome/gtk+/gdk/gdkevents.c line 69
  • #75 gdk_event_source_dispatch
    at /home/prahal/checkout/gnome/gtk+/gdk/x11/gdkeventsource.c line 358
  • #76 g_main_dispatch
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 2784
  • #77 g_main_context_dispatch
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3288
  • #78 g_main_context_iterate
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3359
  • #79 g_main_context_iteration
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3420
  • #80 g_application_run
    at /home/prahal/checkout/gnome/glib/gio/gapplication.c line 1620
  • #81 main
    at /home/prahal/checkout/gnome/epiphany/src/ephy-main.c line 478
  • #0 handler_unref_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 612
  • #1 g_signal_handler_disconnect
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 2587
  • #2 signal_handlers_foreach_matched_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 2734
  • #3 g_signal_handlers_disconnect_matched
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 2877
  • #4 quick_accel_remove
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 556
  • #5 gtk_accel_group_disconnect
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 724
  • #6 gtk_action_disconnect_accelerator
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaction.c line 1807
  • #7 gtk_menu_item_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenuitem.c line 622
  • #8 g_object_run_dispose
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 1062
  • #9 gtk_widget_destroy
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 3984
  • #10 gtk_menu_shell_forall
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenushell.c line 1206
  • #11 gtk_container_foreach
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkcontainer.c line 2062
  • #12 gtk_container_destroy
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkcontainer.c line 1378
  • #13 gtk_menu_destroy
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenu.c line 1153
  • #14 g_cclosure_marshal_VOID__VOID
    at /home/prahal/checkout/gnome/glib/gobject/gmarshal.c line 85
  • #15 g_type_class_meta_marshal
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 970
  • #16 g_closure_invoke
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 777
  • #17 signal_emit_unlocked_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3683
  • #18 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3315
  • #19 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #20 gtk_widget_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 10341
  • #21 gtk_menu_shell_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenushell.c line 535
  • #22 g_object_unref
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 2987
  • #23 g_cclosure_marshal_VOID__OBJECTv
    at /home/prahal/checkout/gnome/glib/gobject/gmarshal.c line 1316
  • #24 g_type_class_meta_marshalv
  • #25 _g_closure_invoke_va
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 840
  • #26 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3226
  • #27 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #28 gtk_container_remove
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkcontainer.c line 1547
  • #29 gtk_widget_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 10330
  • #30 gtk_menu_shell_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenushell.c line 535
  • #31 g_object_unref
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 2987
  • #32 free_node
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkuimanager.c line 1404
  • #33 g_node_traverse_post_order
    at /home/prahal/checkout/gnome/glib/glib/gnode.c line 615
  • #34 g_node_traverse_post_order
    at /home/prahal/checkout/gnome/glib/glib/gnode.c line 610
  • #35 g_node_traverse
    at /home/prahal/checkout/gnome/glib/glib/gnode.c line 875
  • #36 gtk_ui_manager_finalize
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkuimanager.c line 680
  • #37 g_object_unref
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 3024
  • #38 ephy_window_dispose
    at /home/prahal/checkout/gnome/epiphany/src/ephy-window.c line 3487
  • #39 g_object_run_dispose
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 1062
  • #40 gtk_widget_destroy
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 3984
  • #41 notebook_page_close_request_cb
    at /home/prahal/checkout/gnome/epiphany/src/ephy-window.c line 3245
  • #42 g_cclosure_marshal_VOID__OBJECTv
    at /home/prahal/checkout/gnome/glib/gobject/gmarshal.c line 1312
  • #43 _g_closure_invoke_va
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 840
  • #44 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3226
  • #45 g_signal_emit_by_name
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3408
  • #46 window_cmd_file_close_window
    at /home/prahal/checkout/gnome/epiphany/src/window-commands.c line 973
  • #47 g_cclosure_marshal_VOID__VOID
    at /home/prahal/checkout/gnome/glib/gobject/gmarshal.c line 85
  • #48 g_closure_invoke
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 777
  • #49 signal_emit_unlocked_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3567
  • #50 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3315
  • #51 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #52 _gtk_action_emit_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaction.c line 801
  • #53 closure_accel_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaction.c line 1638
  • #54 g_closure_invoke
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 777
  • #55 signal_emit_unlocked_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3567
  • #56 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3325
  • #57 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #58 gtk_accel_group_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 914
  • #59 gtk_accel_groups_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 952
  • #60 gtk_window_activate_key
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwindow.c line 9453
  • #61 gtk_window_key_press_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwindow.c line 6089
  • #62 ephy_window_key_press_event
    at /home/prahal/checkout/gnome/epiphany/src/ephy-window.c line 958
  • #63 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 130
  • #64 g_type_class_meta_marshalv
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 997
  • #65 _g_closure_invoke_va
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 840
  • #66 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3226
  • #67 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #68 gtk_widget_event_internal
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 6308
  • #69 gtk_widget_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 5965
  • #70 propagate_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 2490
  • #71 gtk_propagate_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 2536
  • #72 gtk_main_do_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 1716
  • #73 _gdk_event_emit
    at /home/prahal/checkout/gnome/gtk+/gdk/gdkevents.c line 69
  • #74 gdk_event_source_dispatch
    at /home/prahal/checkout/gnome/gtk+/gdk/x11/gdkeventsource.c line 358
  • #75 g_main_dispatch
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 2784
  • #76 g_main_context_dispatch
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3288
  • #77 g_main_context_iterate
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3359
  • #78 g_main_context_iteration
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3420
  • #79 g_application_run
    at /home/prahal/checkout/gnome/glib/gio/gapplication.c line 1620
  • #80 main
    at /home/prahal/checkout/gnome/epiphany/src/ephy-main.c line 478
  • #0 handler_unref_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 612
  • #1 handler_match_free1_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 483
  • #2 signal_handlers_foreach_matched_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 2737
  • #3 g_signal_handlers_disconnect_matched
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 2877
  • #4 quick_accel_remove
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 556
  • #5 gtk_accel_group_disconnect
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 724
  • #6 gtk_action_disconnect_accelerator
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaction.c line 1807
  • #7 gtk_menu_item_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenuitem.c line 622
  • #8 g_object_run_dispose
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 1062
  • #9 gtk_widget_destroy
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 3984
  • #10 gtk_menu_shell_forall
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenushell.c line 1206
  • #11 gtk_container_foreach
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkcontainer.c line 2062
  • #12 gtk_container_destroy
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkcontainer.c line 1378
  • #13 gtk_menu_destroy
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenu.c line 1153
  • #14 g_cclosure_marshal_VOID__VOID
    at /home/prahal/checkout/gnome/glib/gobject/gmarshal.c line 85
  • #15 g_type_class_meta_marshal
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 970
  • #16 g_closure_invoke
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 777
  • #17 signal_emit_unlocked_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3683
  • #18 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3315
  • #19 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #20 gtk_widget_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 10341
  • #21 gtk_menu_shell_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenushell.c line 535
  • #22 g_object_unref
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 2987
  • #23 g_cclosure_marshal_VOID__OBJECTv
    at /home/prahal/checkout/gnome/glib/gobject/gmarshal.c line 1316
  • #24 g_type_class_meta_marshalv
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 997
  • #25 _g_closure_invoke_va
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 840
  • #26 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3226
  • #27 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #28 gtk_container_remove
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkcontainer.c line 1547
  • #29 gtk_widget_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 10330
  • #30 gtk_menu_shell_dispose
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmenushell.c line 535
  • #31 g_object_unref
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 2987
  • #32 free_node
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkuimanager.c line 1404
  • #33 g_node_traverse_post_order
    at /home/prahal/checkout/gnome/glib/glib/gnode.c line 615
  • #34 g_node_traverse_post_order
    at /home/prahal/checkout/gnome/glib/glib/gnode.c line 610
  • #35 g_node_traverse
    at /home/prahal/checkout/gnome/glib/glib/gnode.c line 875
  • #36 gtk_ui_manager_finalize
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkuimanager.c line 680
  • #37 g_object_unref
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 3024
  • #38 ephy_window_dispose
    at /home/prahal/checkout/gnome/epiphany/src/ephy-window.c line 3487
  • #39 g_object_run_dispose
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 1062
  • #40 gtk_widget_destroy
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 3984
  • #41 notebook_page_close_request_cb
    at /home/prahal/checkout/gnome/epiphany/src/ephy-window.c line 3245
  • #42 g_cclosure_marshal_VOID__OBJECTv
    at /home/prahal/checkout/gnome/glib/gobject/gmarshal.c line 1312
  • #43 _g_closure_invoke_va
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 840
  • #44 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3226
  • #45 g_signal_emit_by_name
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3408
  • #46 window_cmd_file_close_window
    at /home/prahal/checkout/gnome/epiphany/src/window-commands.c line 973
  • #47 g_cclosure_marshal_VOID__VOID
    at /home/prahal/checkout/gnome/glib/gobject/gmarshal.c line 85
  • #48 g_closure_invoke
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 777
  • #49 signal_emit_unlocked_R
  • #50 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3315
  • #51 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #52 _gtk_action_emit_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaction.c line 801
  • #53 closure_accel_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaction.c line 1638
  • #54 g_closure_invoke
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 777
  • #55 signal_emit_unlocked_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3567
  • #56 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3325
  • #57 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #58 gtk_accel_group_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 914
  • #59 gtk_accel_groups_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 952
  • #60 gtk_window_activate_key
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwindow.c line 9453
  • #61 gtk_window_key_press_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwindow.c line 6089
  • #62 ephy_window_key_press_event
    at /home/prahal/checkout/gnome/epiphany/src/ephy-window.c line 958
  • #63 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 130
  • #64 g_type_class_meta_marshalv
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 997
  • #65 _g_closure_invoke_va
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 840
  • #66 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3226
  • #67 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #68 gtk_widget_event_internal
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 6308
  • #69 gtk_widget_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 5965
  • #70 propagate_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 2490
  • #71 gtk_propagate_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 2536
  • #72 gtk_main_do_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 1716
  • #73 _gdk_event_emit
    at /home/prahal/checkout/gnome/gtk+/gdk/gdkevents.c line 69
  • #74 gdk_event_source_dispatch
    at /home/prahal/checkout/gnome/gtk+/gdk/x11/gdkeventsource.c line 358
  • #75 g_main_dispatch
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 2784
  • #76 g_main_context_dispatch
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3288
  • #77 g_main_context_iterate
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3359
  • #78 g_main_context_iteration
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3420
  • #79 g_application_run
    at /home/prahal/checkout/gnome/glib/gio/gapplication.c line 1620
  • #80 main
    at /home/prahal/checkout/gnome/epiphany/src/ephy-main.c line 478
  • #0 handler_unref_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 612
  • #1 invalid_closure_notify
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3742
  • #2 closure_invoke_notifiers
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 264
  • #3 g_closure_invalidate
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 571
  • #4 destroy_closure_array
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 3785
  • #5 g_data_set_internal
    at /home/prahal/checkout/gnome/glib/glib/gdataset.c line 411
  • #6 g_datalist_id_set_data_full
    at /home/prahal/checkout/gnome/glib/glib/gdataset.c line 674
  • #7 g_object_real_dispose
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 1012
  • #8 g_object_unref
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 2987
  • #9 remove_action
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkactiongroup.c line 355
  • #10 g_hash_table_remove_all_nodes
    at /home/prahal/checkout/gnome/glib/glib/ghash.c line 500
  • #11 g_hash_table_remove_all
    at /home/prahal/checkout/gnome/glib/glib/ghash.c line 1309
  • #12 g_hash_table_destroy
    at /home/prahal/checkout/gnome/glib/glib/ghash.c line 1013
  • #13 gtk_action_group_finalize
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkactiongroup.c line 564
  • #14 g_object_unref
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 3024
  • #15 _gtk_action_emit_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaction.c line 806
  • #16 closure_accel_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaction.c line 1638
  • #17 g_closure_invoke
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 777
  • #18 signal_emit_unlocked_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3567
  • #19 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3325
  • #20 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #21 gtk_accel_group_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 914
  • #22 gtk_accel_groups_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 952
  • #23 gtk_window_activate_key
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwindow.c line 9453
  • #24 gtk_window_key_press_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwindow.c line 6089
  • #25 ephy_window_key_press_event
    at /home/prahal/checkout/gnome/epiphany/src/ephy-window.c line 958
  • #26 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 130
  • #27 g_type_class_meta_marshalv
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 997
  • #28 _g_closure_invoke_va
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 840
  • #29 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3226
  • #30 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #31 gtk_widget_event_internal
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 6308
  • #32 gtk_widget_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 5965
  • #33 propagate_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 2490
  • #34 gtk_propagate_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 2536
  • #35 gtk_main_do_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 1716
  • #36 _gdk_event_emit
    at /home/prahal/checkout/gnome/gtk+/gdk/gdkevents.c line 69
  • #37 gdk_event_source_dispatch
    at /home/prahal/checkout/gnome/gtk+/gdk/x11/gdkeventsource.c line 358
  • #38 g_main_dispatch
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 2784
  • #39 g_main_context_dispatch
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3288
  • #40 g_main_context_iterate
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3359
  • #41 g_main_context_iteration
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3420
  • #42 g_application_run
    at /home/prahal/checkout/gnome/glib/gio/gapplication.c line 1620
  • #43 main
    at /home/prahal/checkout/gnome/epiphany/src/ephy-main.c line 478
  • #0 invalid_closure_notify
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3740
  • #1 closure_invoke_notifiers
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 264
  • #2 g_closure_invalidate
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 571
  • #3 destroy_closure_array
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 3785
  • #4 g_data_set_internal
    at /home/prahal/checkout/gnome/glib/glib/gdataset.c line 411
  • #5 g_datalist_id_set_data_full
    at /home/prahal/checkout/gnome/glib/glib/gdataset.c line 674
  • #6 g_object_real_dispose
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 1012
  • #7 g_object_unref
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 2987
  • #8 closure_invoke_notifiers
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 285
  • #9 g_closure_invoke
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 783
  • #10 signal_emit_unlocked_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3567
  • #11 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3325
  • #12 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #13 gtk_accel_group_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 914
  • #14 gtk_accel_groups_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 952
  • #15 gtk_window_activate_key
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwindow.c line 9453
  • #16 gtk_window_key_press_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwindow.c line 6089
  • #17 ephy_window_key_press_event
    at /home/prahal/checkout/gnome/epiphany/src/ephy-window.c line 958
  • #18 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 130
  • #19 g_type_class_meta_marshalv
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 997
  • #20 _g_closure_invoke_va
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 840
  • #21 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3226
  • #22 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #23 gtk_widget_event_internal
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 6308
  • #24 gtk_widget_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkwidget.c line 5965
  • #25 propagate_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 2490
  • #26 gtk_propagate_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 2536
  • #27 gtk_main_do_event
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkmain.c line 1716
  • #28 _gdk_event_emit
    at /home/prahal/checkout/gnome/gtk+/gdk/gdkevents.c line 69
  • #29 gdk_event_source_dispatch
    at /home/prahal/checkout/gnome/gtk+/gdk/x11/gdkeventsource.c line 358
  • #30 g_main_dispatch
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 2784
  • #31 g_main_context_dispatch
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3288
  • #32 g_main_context_iterate
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3359
  • #33 g_main_context_iteration
    at /home/prahal/checkout/gnome/glib/glib/gmain.c line 3420
  • #34 g_application_run
    at /home/prahal/checkout/gnome/glib/gio/gapplication.c line 1620
  • #35 main
    at /home/prahal/checkout/gnome/epiphany/src/ephy-main.c line 478

Comment 13 Alban Browaeys 2013-01-08 19:24:04 UTC
Created attachment 233004 [details]
refcounting steps before the free and NULL dereference

bugzilla seems to cleanup this too much so here is the intial paste non mangled.
Comment 14 Allison Karlitskaya (desrt) 2013-01-08 20:32:53 UTC
The commit introducing the crash fixes an obviously-correct testcase failure and I don't believe it's causing a true regression in this case (ie: it's really just upgrading a critical to an outright segfault -- the code is clearly broken either way).

I still suspect the real bug is in Gtk (UI manager?) somewhere but I don't dismiss the idea of it being in GLib.  I'd absolutely love a simple testcase that demonstrates it.
Comment 15 Alban Browaeys 2013-01-08 21:22:08 UTC
Created attachment 233019 [details]
group refcount lifecycle the closure is attached to 

The closure is invalidated when the group is finalized that is when
gtk_ui_manager_finalize (ephy_window_dispose).

The previous "233004: refcounting steps before the free and NULL dereference"
backtraces shows invalidation of this group :
  • #13 gtk_action_group_finalize
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkactiongroup.c line 564
  • #14 g_object_unref
    at /home/prahal/checkout/gnome/glib/gobject/gobject.c line 3024
  • #15 _gtk_action_emit_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaction.c line 806
  • #1 _gtk_action_emit_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaction.c line 797
  • #2 closure_accel_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaction.c line 1638
  • #3 g_closure_invoke
    at /home/prahal/checkout/gnome/glib/gobject/gclosure.c line 777
  • #4 signal_emit_unlocked_R
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3567
  • #5 g_signal_emit_valist
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3325
  • #6 g_signal_emit
    at /home/prahal/checkout/gnome/glib/gobject/gsignal.c line 3371
  • #7 gtk_accel_group_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 914
  • #8 gtk_accel_groups_activate
    at /home/prahal/checkout/gnome/gtk+/gtk/gtkaccelgroup.c line 952


I still do not know where the accel is attached to the gtkactiongroup and gtkaction end of life.
Comment 16 Alban Browaeys 2013-01-08 21:25:46 UTC
Well sorry again for the bugzilla not fu to me.
"The closure is invalidated when the group is finalized that is when
gtk_ui_manager_finalize (ephy_window_dispose).

The previous "233004: refcounting steps before the free and NULL dereference"
backtraces shows invalidation of this group .

leads to call to the invalidate notifiers (step "5)") when the action is finalized in remove_action (gtkactiongroup.c).
And step "6)" when the gtkactiongroup is finalized in signal_emit_unlocked_R. -

The latter is an artefact demonstrated in the attached gdb session accel, ie the actiongroup is in fact unref in the gtk ui manager finalization once but as _gtk_action_emit_activate took a reference on it before gtk ui manager was finalized, it ends up freed when _gtk_action_emit_activate remove this reference.
As _gtk_action_emit_activate is called from closure_accel_activate."
Comment 17 Alban Browaeys 2013-01-09 03:34:36 UTC
step 5 of 233004: refcounting steps before the free and NULL dereference.
was awkward as the closure was not paired with the handler which was unrefed.
It turns out that:
3729	static void
3730	invalid_closure_notify (gpointer  instance,
3731			        GClosure *closure)
3732	{
3733	  Handler *handler;
3734	  guint signal_id;
3735	
3736	  SIGNAL_LOCK ();
(gdb) l
3737	
3738	  handler = handler_lookup (instance, 0, closure, &signal_id);
3739	  /* GClosure removes our notifier when we're done */
3740	  handler->has_invalid_closure_notify = 0;
3741	  //remove_invalid_closure_notify (handler, instance);
3742	  handler_unref_R (signal_id, instance, handler);
3743	
3744	  SIGNAL_UNLOCK ();
3745	}
3746	
 as previous g_signal_handler_disconnect set the sequential_number of the handler to 0 , handler_lookup matches our handler even for non matching closure
 when passed the handler_id 0 in invalid_closure_notify.


This fixes the segfault but still leaves two critical messages:
(epiphany:7280): GLib-GObject-CRITICAL **: handler_unref_R: assertion `handler->ref_count > 0' failed
Comment 18 Allison Karlitskaya (desrt) 2013-01-16 20:27:17 UTC
Created attachment 233629 [details]
small demo program

Here is something like the smallest possible use of GtkUIManager that demonstrates the issue.
Comment 19 Alban Browaeys 2013-01-16 23:47:31 UTC
Created attachment 233639 [details] [review]
gtkaccelgroup: ref the action and actiongroup before  activating

Fixes the two :
(epiphany:7280): GLib-GObject-CRITICAL **: handler_unref_R: assertion
`handler->ref_count > 0' failed
left after fixing the segfault in glib via a hack, that I will follow. This gtk+ fix looks clean while the glib one I will attach is not.
Comment 20 Alban Browaeys 2013-01-16 23:54:49 UTC
Created attachment 233641 [details] [review]
signal: do not set the sequential number to 0 on disconnect.

the glib side that fix the segfault but leaves crtical warnings. Crude hack it seems as there might be code that depends on this sequential num equal 0 meaning handler disconnected. Sadly invalid_closure_notify also use it as meaning invalid handler, only select handlers on closure equality. When disconnected a handler matches always in the invalid_closure_notify call to handler_lookup.
Comment 21 Allison Karlitskaya (desrt) 2013-01-17 04:04:27 UTC
Created attachment 233647 [details] [review]
gsignal: fix closure invalidation code

This is the bug that has been causing segfaults and criticals when accel
keys are used to close windows via GtkUIManager.

The main cause of this problem was a mistake made in the original patch
when modifying the handler_lookup() to take the extra 'closure'
parameter.  The original check used was:

    if (handler->sequential_number == handler_id ||
       (closure && handler->closure == closure))

It was called to find a particular closure like so:

    handler_lookup (instance, 0, closure, &signal_id);

The problem is that the check will return if either the signal ID or
closure matches (if a closure was given).  The calling code assumes 0 to
be an invalid signal ID which will match no handlers, but unfortunately
the rest of gsignal code uses this to denote a signal that has already
been disconnected.  The result is that this function was searching for a
matching closure _or_ the first already-disconnected handler.  When it
found the already-disconnected handler, we'd get criticals and crashes.

The condition has been corrected; it now ignores the handler_id
parameter if the closure parameter is non-NULL.

While we're in here, change the lifecycle of the invalidation notify to
be easier to understand.

Before, the notify was removed when the last reference on the handler
dropped.  This could happen in very many situations; often at the end of
an emission.  Instead, we now tie the registration of the notifier to
the lifecycle of the signal connection.  When the signal is disconnected
we remove the notification, even if other references are held (eg:
because it is currently being dispatched).
Comment 22 Martin Pitt 2013-01-17 09:57:31 UTC
Comment on attachment 233647 [details] [review]
gsignal: fix closure invalidation code

Many thanks Ryan! That seems to do the trick very nicely.
Comment 23 Allison Karlitskaya (desrt) 2013-01-17 14:00:32 UTC
The Ubuntu guys tried an upload of glib with this patch and ran it against the autopkgtests.  It fixed all of the known issues and didn't introduce any new ones.  Good enough for me.

Attachment 233647 [details] pushed as d89fb7b - gsignal: fix closure invalidation code