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 671939 - [regression] crash on exit
[regression] crash on exit
Status: RESOLVED FIXED
Product: gtk+
Classification: Platform
Component: Widget: GtkTreeView
3.4.x
Other Linux
: Normal critical
: ---
Assigned To: gtktreeview-bugs
gtktreeview-bugs
: 674906 675984 679291 (view as bug list)
Depends on:
Blocks:
 
 
Reported: 2012-03-12 20:06 UTC by David Ronis
Modified: 2013-03-13 01:08 UTC
See Also:
GNOME target: 3.4
GNOME version: ---



Description David Ronis 2012-03-12 20:06:50 UTC
I'm running gnumeric-1.11.2 on a gnome-3.3.91 installation (in particular, this means I'm running with glib-2.31.20 and gtk+-3.3.18).  Gnumeric works more or less as expected, but crashes if I close a window the crtl-w or exit with ctrl-q.

Here's a backtrace:

Program terminated with signal 11, Segmentation fault.

Thread 1 (Thread 0xb5f5a7f0 (LWP 8687))

  • #0 free
    from /lib/libc.so.6
  • #1 standard_free
    at gmem.c line 98
  • #2 g_free
    at gmem.c line 252
  • #3 set_entry_val
    at go-action-combo-text.c line 71
  • #4 cb_entry_changed
    at go-action-combo-text.c line 85
  • #5 go__BOOLEAN__POINTER
    at go-marshalers.c line 126
  • #6 g_closure_invoke
    at gclosure.c line 777
  • #7 signal_emit_unlocked_R
    at gsignal.c line 3547
  • #8 g_signal_emitv
    at gsignal.c line 3037
  • #9 go_signal_emit
    at go-combo-text.c line 133
  • #10 cb_list_changed
    at go-combo-text.c line 170
  • #11 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #12 g_closure_invoke
    at gclosure.c line 777
  • #13 signal_emit_unlocked_R
    at gsignal.c line 3547
  • #14 g_signal_emit_valist
    at gsignal.c line 3295
  • #15 g_signal_emit
    at gsignal.c line 3352
  • #16 gtk_tree_view_real_set_cursor
    at gtktreeview.c line 13292
  • #17 gtk_tree_view_set_model
    at gtktreeview.c line 11508
  • #18 gtk_tree_view_destroy
    at gtktreeview.c line 2099
  • #19 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #20 g_type_class_meta_marshal
    at gclosure.c line 970
  • #21 g_closure_invoke
    at gclosure.c line 777
  • #22 signal_emit_unlocked_R
    at gsignal.c line 3663
  • #23 g_signal_emit_valist
    at gsignal.c line 3295
  • #24 g_signal_emit
    at gsignal.c line 3352
  • #25 gtk_widget_dispose
    at gtkwidget.c line 10338
  • #26 g_object_run_dispose
    at gobject.c line 1061
  • #27 gtk_widget_destroy
    at gtkwidget.c line 3943
  • #28 gtk_bin_forall
    at gtkbin.c line 170
  • #29 gtk_container_foreach
    at gtkcontainer.c line 2040
  • #30 gtk_container_destroy
    at gtkcontainer.c line 1369
  • #31 gtk_viewport_destroy
    at gtkviewport.c line 307
  • #32 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #33 g_type_class_meta_marshal
    at gclosure.c line 970
  • #34 g_closure_invoke
    at gclosure.c line 777
  • #35 signal_emit_unlocked_R
    at gsignal.c line 3663
  • #36 g_signal_emit_valist
    at gsignal.c line 3295
  • #37 g_signal_emit
    at gsignal.c line 3352
  • #38 gtk_widget_dispose
    at gtkwidget.c line 10338
  • #39 g_object_run_dispose
    at gobject.c line 1061
  • #40 gtk_widget_destroy
    at gtkwidget.c line 3943
  • #41 gtk_bin_forall
    at gtkbin.c line 170
  • #42 gtk_scrolled_window_forall
    at gtkscrolledwindow.c line 1572
  • #43 gtk_container_foreach
    at gtkcontainer.c line 2040
  • #44 gtk_container_destroy
    at gtkcontainer.c line 1369
  • #45 gtk_scrolled_window_destroy
    at gtkscrolledwindow.c line 1263
  • #46 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #47 g_type_class_meta_marshal
    at gclosure.c line 970
  • #48 g_closure_invoke
    at gclosure.c line 777
  • #49 signal_emit_unlocked_R
    at gsignal.c line 3663
  • #50 g_signal_emit_valist
    at gsignal.c line 3295
  • #51 g_signal_emit
    at gsignal.c line 3352
  • #52 gtk_widget_dispose
    at gtkwidget.c line 10338
  • #53 g_object_run_dispose
    at gobject.c line 1061
  • #54 gtk_widget_destroy
    at gtkwidget.c line 3943
  • #55 gtk_box_forall
    at gtkbox.c line 1855
  • #56 gtk_container_foreach
    at gtkcontainer.c line 2040
  • #57 gtk_container_destroy
    at gtkcontainer.c line 1369
  • #58 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #59 g_type_class_meta_marshal
    at gclosure.c line 970
  • #60 g_closure_invoke
    at gclosure.c line 777
  • #61 signal_emit_unlocked_R
    at gsignal.c line 3663
  • #62 g_signal_emit_valist
    at gsignal.c line 3295
  • #63 g_signal_emit
    at gsignal.c line 3352
  • #64 gtk_widget_dispose
    at gtkwidget.c line 10338
  • #65 g_object_run_dispose
    at gobject.c line 1061
  • #66 gtk_widget_destroy
    at gtkwidget.c line 3943
  • #67 gtk_frame_forall
    at gtkframe.c line 376
  • #68 gtk_container_foreach
    at gtkcontainer.c line 2040
  • #69 gtk_container_destroy
    at gtkcontainer.c line 1369
  • #70 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #71 g_type_class_meta_marshal
    at gclosure.c line 970
  • #72 g_closure_invoke
    at gclosure.c line 777
  • #73 signal_emit_unlocked_R
    at gsignal.c line 3663
  • #74 g_signal_emit_valist
    at gsignal.c line 3295
  • #75 g_signal_emit
    at gsignal.c line 3352
  • #76 gtk_widget_dispose
    at gtkwidget.c line 10338
  • #77 g_object_run_dispose
    at gobject.c line 1061
  • #78 gtk_widget_destroy
    at gtkwidget.c line 3943
  • #79 gtk_bin_forall
    at gtkbin.c line 170
  • #80 gtk_container_foreach
    at gtkcontainer.c line 2040
  • #81 gtk_container_destroy
    at gtkcontainer.c line 1369
  • #82 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #83 g_type_class_meta_marshal
    at gclosure.c line 970
  • #84 g_closure_invoke
    at gclosure.c line 777
  • #85 signal_emit_unlocked_R
    at gsignal.c line 3663
  • #86 g_signal_emit_valist
    at gsignal.c line 3295
  • #87 g_signal_emit
    at gsignal.c line 3352
  • #88 gtk_widget_dispose
    at gtkwidget.c line 10338
  • #89 g_object_run_dispose
    at gobject.c line 1061
  • #90 gtk_widget_destroy
    at gtkwidget.c line 3943
  • #91 gtk_bin_forall
    at gtkbin.c line 170
  • #92 gtk_container_foreach
    at gtkcontainer.c line 2040
  • #93 gtk_container_destroy
    at gtkcontainer.c line 1369
  • #94 gtk_window_destroy
    at gtkwindow.c line 4736
  • #95 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #96 g_type_class_meta_marshal
    at gclosure.c line 970
  • #97 g_closure_invoke
    at gclosure.c line 777
  • #98 signal_emit_unlocked_R
    at gsignal.c line 3663
  • #99 g_signal_emit_valist
    at gsignal.c line 3295
  • #100 g_signal_emit
    at gsignal.c line 3352
  • #101 gtk_widget_dispose
    at gtkwidget.c line 10338
  • #102 gtk_window_dispose
    at gtkwindow.c line 2429
  • #103 g_object_run_dispose
    at gobject.c line 1061
  • #104 gtk_widget_destroy
    at gtkwidget.c line 3943
  • #105 go_combo_box_destroy
    at go-combo-box.c line 117
  • #106 go_combo_text_destroy
    at go-combo-text.c line 260
  • #107 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #108 g_type_class_meta_marshal
    at gclosure.c line 970
  • #109 g_closure_invoke
    at gclosure.c line 777
  • #110 signal_emit_unlocked_R
    at gsignal.c line 3663
  • #111 g_signal_emit_valist
    at gsignal.c line 3295
  • #112 g_signal_emit
    at gsignal.c line 3352
  • #113 gtk_widget_dispose
    at gtkwidget.c line 10338
  • #114 g_object_run_dispose
    at gobject.c line 1061
  • #115 gtk_widget_destroy
    at gtkwidget.c line 3943
  • #116 gtk_bin_forall
    at gtkbin.c line 170
  • #117 gtk_container_foreach
    at gtkcontainer.c line 2040
  • #118 gtk_container_destroy
    at gtkcontainer.c line 1369
  • #119 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #120 g_type_class_meta_marshal
    at gclosure.c line 970
  • #121 g_closure_invoke
    at gclosure.c line 777
  • #122 signal_emit_unlocked_R
    at gsignal.c line 3663
  • #123 g_signal_emit_valist
    at gsignal.c line 3295
  • #124 g_signal_emit
    at gsignal.c line 3352
  • #125 gtk_widget_dispose
    at gtkwidget.c line 10338
  • #126 gtk_tool_item_dispose
    at gtktoolitem.c line 320
  • #127 g_object_run_dispose
    at gobject.c line 1061
  • #128 gtk_widget_destroy
    at gtkwidget.c line 3943
  • #129 gtk_toolbar_forall
    at gtktoolbar.c line 2554
  • #130 gtk_container_foreach
    at gtkcontainer.c line 2040
  • #131 gtk_container_destroy
    at gtkcontainer.c line 1369
  • #132 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #133 g_type_class_meta_marshal
    at gclosure.c line 970
  • #134 g_closure_invoke
    at gclosure.c line 777
  • #135 signal_emit_unlocked_R
    at gsignal.c line 3663
  • #136 g_signal_emit_valist
    at gsignal.c line 3295
  • #137 g_signal_emit
    at gsignal.c line 3352
  • #138 gtk_widget_dispose
    at gtkwidget.c line 10338
  • #139 gtk_toolbar_dispose
    at gtktoolbar.c line 3146
  • #140 g_object_run_dispose
    at gobject.c line 1061
  • #141 gtk_widget_destroy
    at gtkwidget.c line 3943
  • #142 gtk_box_forall
    at gtkbox.c line 1855
  • #143 gtk_container_foreach
    at gtkcontainer.c line 2040
  • #144 gtk_container_destroy
    at gtkcontainer.c line 1369
  • #145 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #146 g_type_class_meta_marshal
    at gclosure.c line 970
  • #147 g_closure_invoke
    at gclosure.c line 777
  • #148 signal_emit_unlocked_R
    at gsignal.c line 3663
  • #149 g_signal_emit_valist
    at gsignal.c line 3295
  • #150 g_signal_emit
    at gsignal.c line 3352
  • #151 gtk_widget_dispose
    at gtkwidget.c line 10338
  • #152 g_object_run_dispose
    at gobject.c line 1061
  • #153 gtk_widget_destroy
    at gtkwidget.c line 3943
  • #154 gtk_box_forall
    at gtkbox.c line 1855
  • #155 gtk_container_foreach
    at gtkcontainer.c line 2040
  • #156 gtk_container_destroy
    at gtkcontainer.c line 1369
  • #157 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #158 g_type_class_meta_marshal
    at gclosure.c line 970
  • #159 g_closure_invoke
    at gclosure.c line 777
  • #160 signal_emit_unlocked_R
    at gsignal.c line 3663
  • #161 g_signal_emit_valist
    at gsignal.c line 3295
  • #162 g_signal_emit
    at gsignal.c line 3352
  • #163 gtk_widget_dispose
    at gtkwidget.c line 10338
  • #164 g_object_run_dispose
    at gobject.c line 1061
  • #165 gtk_widget_destroy
    at gtkwidget.c line 3943
  • #166 gtk_box_forall
    at gtkbox.c line 1855
  • #167 gtk_container_foreach
    at gtkcontainer.c line 2040
  • #168 gtk_container_destroy
    at gtkcontainer.c line 1369
  • #169 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #170 g_type_class_meta_marshal
    at gclosure.c line 970
  • #171 g_closure_invoke
    at gclosure.c line 777
  • #172 signal_emit_unlocked_R
    at gsignal.c line 3663
  • #173 g_signal_emit_valist
    at gsignal.c line 3295
  • #174 g_signal_emit
    at gsignal.c line 3352
  • #175 gtk_widget_dispose
    at gtkwidget.c line 10338
  • #176 g_object_run_dispose
    at gobject.c line 1061
  • #177 gtk_widget_destroy
    at gtkwidget.c line 3943
  • #178 gtk_bin_forall
    at gtkbin.c line 170
  • #179 gtk_container_foreach
    at gtkcontainer.c line 2040
  • #180 gtk_container_destroy
    at gtkcontainer.c line 1369
  • #181 gtk_window_destroy
    at gtkwindow.c line 4736
  • #182 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #183 g_type_class_meta_marshal
    at gclosure.c line 970
  • #184 g_closure_invoke
    at gclosure.c line 777
  • #185 signal_emit_unlocked_R
    at gsignal.c line 3663
  • #186 g_signal_emit_valist
    at gsignal.c line 3295
  • #187 g_signal_emit
    at gsignal.c line 3352
  • #188 gtk_widget_dispose
    at gtkwidget.c line 10338
  • #189 gtk_window_dispose
    at gtkwindow.c line 2429
  • #190 g_object_run_dispose
    at gobject.c line 1061
  • #191 gtk_widget_destroy
    at gtkwidget.c line 3943
  • #192 wbc_gtk_finalize
    at wbc-gtk.c line 5230
  • #193 g_object_unref
    at gobject.c line 3018
  • #194 wb_view_dispose
    at workbook-view.c line 892
  • #195 g_object_unref
    at gobject.c line 2981
  • #196 workbook_dispose
    at workbook.c line 140
  • #197 g_object_unref
    at gobject.c line 2981
  • #198 dialog_quit
    at dialog-quit.c line 464
  • #199 cb_file_quit
    at wbc-gtk-actions.c line 329
  • #200 cb_file_quit
    at wbc-gtk-actions.c line 318
  • #201 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #202 g_closure_invoke
    at gclosure.c line 777
  • #203 signal_emit_unlocked_R
    at gsignal.c line 3547
  • #204 g_signal_emit_valist
    at gsignal.c line 3295
  • #205 g_signal_emit
    at gsignal.c line 3352
  • #206 _gtk_action_emit_activate
    at gtkaction.c line 800
  • #207 closure_accel_activate
    at gtkaction.c line 1636
  • #208 closure_accel_activate
    at gtkaction.c line 1627
  • #209 g_closure_invoke
    at gclosure.c line 777
  • #210 signal_emit_unlocked_R
    at gsignal.c line 3547
  • #211 g_signal_emit_valist
    at gsignal.c line 3305
  • #212 g_signal_emit
    at gsignal.c line 3352
  • #213 gtk_accel_group_activate
    at gtkaccelgroup.c line 914
  • #214 gtk_accel_groups_activate
    at gtkaccelgroup.c line 952
  • #215 gtk_window_activate_key
    at gtkwindow.c line 9494
  • #216 gtk_window_key_press_event
    at gtkwindow.c line 6072
  • #217 _gtk_marshal_BOOLEAN__BOXED
    at gtkmarshalers.c line 85
  • #218 g_type_class_meta_marshal
    at gclosure.c line 970
  • #219 g_closure_invoke
    at gclosure.c line 777
  • #220 signal_emit_unlocked_R
    at gsignal.c line 3585
  • #221 g_signal_emit_valist
    at gsignal.c line 3305
  • #222 g_signal_emit
    at gsignal.c line 3352
  • #223 gtk_widget_event_internal
    at gtkwidget.c line 6380
  • #224 propagate_event
    at gtkmain.c line 2479
  • #225 gtk_main_do_event
    at gtkmain.c line 1713
  • #226 _gdk_event_emit
    at gdkevents.c line 69
  • #227 gdk_event_source_dispatch
    at gdkeventsource.c line 358
  • #228 g_main_dispatch
    at gmain.c line 2510
  • #229 g_main_context_dispatch
    at gmain.c line 3047
  • #230 g_main_context_iterate
    at gmain.c line 3118
  • #231 g_main_context_iterate
    at gmain.c line 3055
  • #232 g_main_loop_run
    at gmain.c line 3312
  • #233 gtk_main
    at gtkmain.c line 1161
  • #234 main
    at main-application.c line 376

Comment 1 David Ronis 2012-03-12 20:08:27 UTC
One other observation.   I see this in other apps as well (e.g., gnome-panel) and suspect that this is not just a gnumeric issue.
Comment 2 Jean Bréfort 2012-03-12 20:59:45 UTC
I don't see the crash, probably related to gtk+-3.3.x.
Comment 3 Andreas J. Guelzow 2012-03-12 22:12:40 UTC
You are running an experimental version of GTK and observing the same problem in other programs. So this bug should really be filed against GTK.
Comment 4 Matthias Clasen 2012-04-27 10:07:47 UTC
*** Bug 674906 has been marked as a duplicate of this bug. ***
Comment 5 David Ronis 2012-04-27 17:08:44 UTC
FWIW the latest gnumeric/goffice (1.11.3/0.9.3) don't have this problem.
Comment 6 Andreas J. Guelzow 2012-04-27 17:32:40 UTC
Morten has committed a workaround to Gnumeric 1.11.3 that tries to avoid hitting this bug in gtk. So the fact that gnumeric/goffice (1.11.3/0.9.3) does not show this crash does not mean that there is no problem in gtk.
Comment 7 Andreas J. Guelzow 2012-04-27 17:34:10 UTC
This is also discussed at https://bugzilla.redhat.com/show_bug.cgi?id=803904
Comment 8 Matthias Clasen 2012-05-16 21:50:57 UTC
*** Bug 675984 has been marked as a duplicate of this bug. ***
Comment 9 André Klapper 2012-07-09 09:58:10 UTC
Patch available in bug 679291 - please review/commit.
Comment 10 André Klapper 2012-07-09 09:58:15 UTC
*** Bug 679291 has been marked as a duplicate of this bug. ***
Comment 11 Emmanuele Bassi (:ebassi) 2012-08-04 20:56:25 UTC
this bug should have been marked as a dupe of 679291, seeing that the other one has a patch - even if this one has a stack trace.

anyway, the patch in attachment 217892 [details] looks okay - but what I'd like to see:

a) bisecting to see what commit broke this;
b) a test case for the TreeView test suite, to ensure we don't regress again;
c) a patch done using git format-patch or git bz, so that we can credit the author.

John, would you be so kind to look at this? that would be stellar.
Comment 12 John Lindgren 2012-08-05 21:12:46 UTC
Copying Matthias's comments from his email:

> The behaviour change was introduced during the heavy refactoring of
> treeview a11y done by Benjamin last winter. We've talked about
> 'fixing' this (ie suppressing the signal in the destroy path), but
> there's a more general question here: do we want to add tons of
> special-cases to prevent this kind of noise in destroy paths ? There's
> plenty of other places where this could happen.

So my efforts here are not wanted, it seems.  "It's not a bug, it's a behavior change."
Comment 13 Emmanuele Bassi (:ebassi) 2012-08-05 21:14:41 UTC
(In reply to comment #12)
> Copying Matthias's comments from his email:
> 
> > The behaviour change was introduced during the heavy refactoring of
> > treeview a11y done by Benjamin last winter. We've talked about
> > 'fixing' this (ie suppressing the signal in the destroy path), but
> > there's a more general question here: do we want to add tons of
> > special-cases to prevent this kind of noise in destroy paths ? There's
> > plenty of other places where this could happen.
> 
> So my efforts here are not wanted, it seems.  "It's not a bug, it's a behavior
> change."

no: it's still an open question.
Comment 14 John Lindgren 2012-08-06 02:08:32 UTC
Well, if you decide to leave it the way it is, then you will need to update the documentation for the "cursor-changed" signal and for gtk_tree_view_get_selection():

cursor-changed: "The position of the cursor (focused cell) has changed, or the GtkTreeView object is being destroyed."

gtk_tree_view_get_selection: "Returns the GtkTreeSelection associated with tree_view, or NULL if tree_view is being destroyed."

And you will need to add lots of "noise" to the documentation in "plenty of other places" also.  Which will make life harder for anyone wanting to use GTK+, because then *they* have to look out for all these special cases.  To me, that seems just stupid.  But what do I know?  I don't develop GTK+, I only use it.
Comment 15 Emmanuele Bassi (:ebassi) 2012-08-06 10:08:05 UTC
(In reply to comment #14)
> To me, that seems just stupid.  But what do I know?  I don't develop GTK+,
> I only use it.

you can also assume that the people interacting with you are not stupid.

please refreain from making comments like this in the future; Bugzilla, like the mailing lists hosted on gnome.org, falls under the Code of Conduct, which you can find on the wiki: https://live.gnome.org/CodeOfConduct
Comment 16 Stefan Sauer (gstreamer, gtkdoc dev) 2012-08-18 19:20:32 UTC
I'd like to see widgets taking care of it. This is based on the assumption that apps_using_gtk >> widgets_in_gtk.
Comment 17 Benjamin Otte (Company) 2013-03-13 01:08:26 UTC
Applied the patch from bug 679291.