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 755473 - segfault freeing popover from no parent
segfault freeing popover from no parent
Status: RESOLVED FIXED
Product: gtk+
Classification: Platform
Component: Widget: GtkPopover
3.18.x
Other Linux
: Normal normal
: ---
Assigned To: gtk-bugs
gtk-bugs
Depends on:
Blocks:
 
 
Reported: 2015-09-23 15:39 UTC by Daniel Stone
Modified: 2015-09-24 03:28 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
GtkWindow: Check for popover realized-ness before unrealizing (828 bytes, patch)
2015-09-23 16:31 UTC, Timm Bäder
committed Details | Review

Description Daniel Stone 2015-09-23 15:39:08 UTC
I'm not quite sure who's at fault here (GtkPopover? ClutterGtkActor? ClutterGtkEmbed? Totem itself?), but when I quit Totem after not having displayed a video - easy reproducer is totem invalid-file-name.wav - then I get a segfault on exit.


  • #0 gdk_window_set_transient_for
    at gdkwindow.c line 10117
  • #1 popover_unrealize
    at gtkwindow.c line 7257
  • #2 _gtk_window_remove_popover
    at gtkwindow.c line 11890
  • #3 _gtk_popover_parent_hierarchy_changed
    at gtkpopover.c line 1685
  • #4 g_cclosure_marshal_VOID__OBJECTv
    at gmarshal.c line 2102
  • #5 _g_closure_invoke_va
    at gclosure.c line 864
  • #6 g_signal_emit_valist
    at gsignal.c line 3292
  • #7 g_signal_emit
    at gsignal.c line 3439
  • #8 gtk_widget_propagate_hierarchy_changed_recurse
    at gtkwidget.c line 9800
  • #9 gtk_box_forall
    at gtkbox.c line 2586
  • #10 gtk_widget_propagate_hierarchy_changed_recurse
    at gtkwidget.c line 9804
  • #11 gtk_widget_propagate_hierarchy_changed_recurse
    at gtkwidget.c line 9804
  • #12 gtk_toolbar_forall
    at gtktoolbar.c line 2500
  • #13 gtk_widget_propagate_hierarchy_changed_recurse
    at gtkwidget.c line 9804
  • #14 gtk_widget_propagate_hierarchy_changed_recurse
    at gtkwidget.c line 9804
  • #15 _gtk_widget_propagate_hierarchy_changed
    at gtkwidget.c line 9842
  • #16 gtk_widget_unparent
    at gtkwidget.c line 4609
  • #17 g_cclosure_marshal_VOID__OBJECTv
    at gmarshal.c line 2102
  • #18 _g_closure_invoke_va
    at gclosure.c line 864
  • #19 g_signal_emit_valist
    at gsignal.c line 3292
  • #20 g_signal_emit
    at gsignal.c line 3439
  • #21 gtk_container_remove
    at gtkcontainer.c line 1893
  • #22 gtk_clutter_actor_unrealize
    at ./gtk-clutter-actor.c line 227
  • #23 _g_closure_invoke_va
    at gclosure.c line 864
  • #24 g_signal_emit_valist
    at gsignal.c line 3292
  • #25 g_signal_emit
    at gsignal.c line 3439
  • #26 unrealize_actor_before_children_cb
    at clutter-actor.c line 2107
  • #27 _clutter_actor_traverse_depth
    at clutter-actor.c line 17877
  • #28 _clutter_actor_traverse_depth
    at clutter-actor.c line 17889
  • #29 _clutter_actor_traverse_depth
    at clutter-actor.c line 17889
  • #30 _clutter_actor_traverse
    at clutter-actor.c line 17938
  • #31 clutter_actor_unrealize_not_hiding
    at clutter-actor.c line 2152
  • #32 clutter_actor_unrealize_internal
    at clutter-actor.c line 2094
  • #33 clutter_actor_unrealize
    at clutter-actor.c line 2077
  • #34 gtk_clutter_embed_stage_unrealize
    at ./gtk-clutter-embed.c line 296
  • #35 gtk_clutter_embed_unrealize
    at ./gtk-clutter-embed.c line 557
  • #36 bacon_video_widget_unrealize
    at bacon-video-widget.c line 654
  • #37 _g_closure_invoke_va
    at gclosure.c line 864
  • #38 g_signal_emit_valist
    at gsignal.c line 3292
  • #39 g_signal_emit
    at gsignal.c line 3439
  • #40 gtk_widget_unrealize
    at gtkwidget.c line 5463
  • #41 gtk_overlay_forall
    at gtkoverlay.c line 617
  • #42 gtk_widget_real_unrealize
    at gtkwidget.c line 12344
  • #43 _g_closure_invoke_va
    at gclosure.c line 864
  • #44 g_signal_emit_valist
    at gsignal.c line 3292
  • #45 g_signal_emit
    at gsignal.c line 3439
  • #46 gtk_widget_unrealize
    at gtkwidget.c line 5463
  • #47 gtk_box_forall
    at gtkbox.c line 2586
  • #48 gtk_widget_real_unrealize
    at gtkwidget.c line 12344
  • #49 _g_closure_invoke_va
    at gclosure.c line 864
  • #50 g_signal_emit_valist
    at gsignal.c line 3292
  • #51 g_signal_emit
    at gsignal.c line 3439
  • #52 gtk_widget_unrealize
    at gtkwidget.c line 5463
  • #53 gtk_stack_forall
    at gtkstack.c line 1882
  • #54 gtk_widget_real_unrealize
    at gtkwidget.c line 12344
  • #55 _g_closure_invoke_va
    at gclosure.c line 864
  • #56 g_signal_emit_valist
    at gsignal.c line 3292
  • #57 g_signal_emit
    at gsignal.c line 3439
  • #58 gtk_widget_unrealize
    at gtkwidget.c line 5463
  • #59 gtk_box_forall
    at gtkbox.c line 2586
  • #60 gtk_widget_real_unrealize
    at gtkwidget.c line 12344
  • #61 _g_closure_invoke_va
    at gclosure.c line 864
  • #62 g_signal_emit_valist
    at gsignal.c line 3292
  • #63 g_signal_emit
    at gsignal.c line 3439
  • #64 gtk_widget_unrealize
    at gtkwidget.c line 5463
  • #65 gtk_window_forall
    at gtkwindow.c line 8150
  • #66 gtk_widget_real_unrealize
    at gtkwidget.c line 12344
  • #67 gtk_window_unrealize
    at gtkwindow.c line 7323
  • #68 g_closure_invoke
    at gclosure.c line 801
  • #69 signal_emit_unlocked_R
    at gsignal.c line 3665
  • #70 g_signal_emit_valist
    at gsignal.c line 3383
  • #71 g_signal_emit
    at gsignal.c line 3439
  • #72 gtk_widget_unrealize
    at gtkwidget.c line 5463
  • #73 gtk_widget_dispose
    at gtkwidget.c line 12010
  • #74 gtk_window_dispose
    at gtkwindow.c line 3066
  • #75 gtk_application_window_dispose
    at gtkapplicationwindow.c line 792
  • #76 g_object_run_dispose
    at gobject.c line 1081
  • #77 totem_object_exit
    at totem-object.c line 1396
  • #78 main_window_destroy_cb
    at totem-object.c line 1406
  • #79 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 130
  • #80 _g_closure_invoke_va
    at gclosure.c line 864
  • #81 g_signal_emit_valist
    at gsignal.c line 3292
  • #82 g_signal_emit
    at gsignal.c line 3439
  • #83 gtk_widget_event_internal
    at gtkwidget.c line 7699
  • #84 gtk_main_do_event
    at gtkmain.c line 1726
  • #85 send_delete_event
    at gtkwindow.c line 1291
  • #86 gdk_threads_dispatch
    at gdk.c line 719
  • #87 g_main_dispatch
    at gmain.c line 3154
  • #88 g_main_context_dispatch
    at gmain.c line 3769
  • #89 g_main_context_iterate
    at gmain.c line 3840
  • #90 g_main_context_iteration
    at gmain.c line 3901
  • #91 g_application_run
    at gapplication.c line 2311
  • #92 main
    at totem.c line 83

Comment 1 Timm Bäder 2015-09-23 16:31:53 UTC
Created attachment 311955 [details] [review]
GtkWindow: Check for popover realized-ness before unrealizing
Comment 2 Emmanuele Bassi (:ebassi) 2015-09-23 16:36:48 UTC
Review of attachment 311955 [details] [review]:

Looks good.
Comment 3 Timm Bäder 2015-09-23 17:46:18 UTC
I wrote that patch just from looking at the code though, I can't reproduce the issue with totem since some of the dependencies won't build, etc. so it would be nice if someone who can reproduce the issue could check if it really fixes the problem.
Comment 4 Bastien Nocera 2015-09-23 21:34:04 UTC
(In reply to Timm Bäder from comment #3)
> I wrote that patch just from looking at the code though, I can't reproduce
> the issue with totem since some of the dependencies won't build, etc.

Would be nice to tell somebody (anyone really) what/why it won't build. Can't fix it otherwise...

> so it
> would be nice if someone who can reproduce the issue could check if it
> really fixes the problem.

I can reproduce it against GTK+ 3.17.9 and the rest of the F23 stack, but can't with newer GTK+ and older clutter* modules in jhbuild. Using the clutter* components from the distribution makes it crash again.

Will try to root cause (rather than band aid).

(The GtkPopOver code also has bug 755499, which can't be helping)
Comment 5 Bastien Nocera 2015-09-23 23:10:08 UTC
Looks like the correct fix, +1 from me.
Comment 6 Matthias Clasen 2015-09-24 03:28:17 UTC
Attachment 311955 [details] pushed as 0230686 - GtkWindow: Check for popover realized-ness before unrealizing