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 736591 - Crash when saving metadata during application shutdown
Crash when saving metadata during application shutdown
Status: RESOLVED FIXED
Product: gedit
Classification: Applications
Component: file loading and saving
git master
Other Windows
: Normal critical
: ---
Assigned To: Gedit maintainers
Gedit maintainers
Depends on:
Blocks:
 
 
Reported: 2014-09-12 21:07 UTC by Sébastien Wilmet
Modified: 2014-12-14 14:30 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
app: shutdown metadata-manager after GTK+ (1.14 KB, patch)
2014-09-12 21:20 UTC, Sébastien Wilmet
committed Details | Review

Description Sébastien Wilmet 2014-09-12 21:07:59 UTC
The crash is simple to reproduce if gedit-metadata-manager is used (on Windows for example):
- open one file with gedit
- select something and copy it to the clipboard (Ctrl+C)
- close gedit
- crash

The crash is because gedit_metadata_manager_set() is called after gedit_metadata_manager_shutdown().

If the GVFS metadata are used, I think it doesn't crash, but the metadata is not saved since it calls the async GIO function and the main loop is already closed. So it should be fixed too.

Program terminated with signal 11, Segmentation fault.
369             if (!gedit_metadata_manager->values_loaded)
(gdb) p gedit_metadata_manager
$1 = (GeditMetadataManager *) 0x0
(gdb) bt
  • #0 gedit_metadata_manager_set
    at gedit/gedit-metadata-manager.c line 369
  • #1 gedit_document_set_metadata
    at gedit/gedit-document.c line 1586
  • #2 save_metadata
    at gedit/gedit-document.c line 176
  • #3 gedit_document_dispose
    at gedit/gedit-document.c line 203
  • #4 g_object_unref
    at gobject.c line 3133
  • #5 weak_refs_notify
    at gobject.c line 2630
  • #6 g_data_set_internal
    at gdataset.c line 407
  • #7 g_datalist_id_set_data_full
    at gdataset.c line 670
  • #8 g_object_real_dispose
    at gobject.c line 1021
  • #9 g_object_unref
    at gobject.c line 3133
  • #10 clipboard_clear_contents_cb
    at gtktextbuffer.c line 3286
  • #11 clipboard_unset
    at gtkclipboard.c line 762
  • #12 selection_clear_event_cb
    at gtkclipboard.c line 404
  • #13 _gtk_marshal_BOOLEAN__BOXED
    at gtkmarshalers.c line 85
  • #14 g_closure_invoke
    at gclosure.c line 768
  • #15 signal_emit_unlocked_R
    at gsignal.c line 3553
  • #16 g_signal_emit_valist
    at gsignal.c line 3319
  • #17 g_signal_emit
    at gsignal.c line 3365
  • #18 gtk_widget_event_internal
    at gtkwidget.c line 7773
  • #19 gtk_widget_event
    at gtkwidget.c line 7366
  • #20 gtk_main_do_event
    at gtkmain.c line 1695
  • #21 _gdk_event_emit
    at gdkevents.c line 69
  • #22 gdk_event_source_dispatch
    at gdkeventsource.c line 364
  • #23 g_main_dispatch
    at gmain.c line 3064
  • #24 g_main_context_dispatch
    at gmain.c line 3663
  • #25 g_main_context_iterate
    at gmain.c line 3734
  • #26 g_main_loop_run
    at gmain.c line 3928
  • #27 gtk_clipboard_real_store
    at gtkclipboard.c line 2148
  • #28 gtk_clipboard_store
    at gtkclipboard.c line 2111
  • #29 _gtk_clipboard_store_all
    at gtkclipboard.c line 2184
  • #30 gtk_application_shutdown
    at gtkapplication.c line 617
  • #31 gedit_app_shutdown
    at gedit/gedit-app.c line 1195
  • #32 g_cclosure_marshal_VOID__VOIDv
    at gmarshal.c line 115
  • #33 g_type_class_meta_marshalv
    at gclosure.c line 988
  • #34 _g_closure_invoke_va
    at gclosure.c line 831
  • #35 g_signal_emit_valist
    at gsignal.c line 3218
  • #36 g_signal_emit
    at gsignal.c line 3365
  • #37 g_application_run
    at gapplication.c line 2288
  • #38 main
    at gedit/gedit.c line 135

Comment 1 Sébastien Wilmet 2014-09-12 21:20:16 UTC
Created attachment 286093 [details] [review]
app: shutdown metadata-manager after GTK+

This avoids a crash when GTK+ still holds a reference to a GeditDocument
for the clipboard.
Comment 2 Sébastien Wilmet 2014-09-12 23:27:00 UTC
Indeed, the metadata is not saved with GVFS. Not sure how to fix that, maybe have a function gedit_app_is_shutting_down(), so we can call the sync GIO function only when the app is shutting down.
Comment 3 Sébastien Wilmet 2014-12-14 14:30:53 UTC
This bug is now fully fixed:
https://git.gnome.org/browse/gedit/commit/?id=2d1e253aa577b9b5b2e0acc2ddc240b0b10e3996