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 708166 - Update EClient properties on idle after GDBusProxy notify
Update EClient properties on idle after GDBusProxy notify
Status: RESOLVED FIXED
Product: evolution
Classification: Applications
Component: Contacts
3.14.x (obsolete)
Other Linux
: Normal critical
: ---
Assigned To: evolution-addressbook-maintainers
Evolution QA team
Depends on:
Blocks:
 
 
Reported: 2013-09-16 15:27 UTC by Vadim Rutkovsky
Modified: 2014-10-20 18:43 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Vadim Rutkovsky 2013-09-16 15:27:29 UTC
* Open Evolution via command and setup Google account
    * Open "Contacts" section
    * Prepare valid photos "/tmp/photo.jpg" and "/tmp/logo.jpg"
    * Create a new contact in Google addressbook with "/tmp/logo.jpg" photo
    * Refresh addressbook
    * Set contact picture to "/tmp/photo.jpg"
    * Save the contact and in resize dialog select "Resize"

evolution-addressbook-factory crashes

Thread 1 (Thread 0x7fede211e840 (LWP 22171))

  • #0 malloc_consolidate
    at malloc.c line 4070
  • #1 _int_free
    at malloc.c line 3978
  • #2 g_free
    from /lib64/libglib-2.0.so.0
  • #3 g_string_free
    from /lib64/libglib-2.0.so.0
  • #4 free_gstring
    at e-vcard.c line 1721
  • #5 g_list_foreach
    from /lib64/libglib-2.0.so.0
  • #6 e_vcard_attribute_remove_values
    at e-vcard.c line 1739
  • #7 e_vcard_attribute_free
    at e-vcard.c line 1363
  • #8 g_list_foreach
    from /lib64/libglib-2.0.so.0
  • #9 g_list_free_full
    from /lib64/libglib-2.0.so.0
  • #10 vcard_finalize
    at e-vcard.c line 81
  • #11 e_contact_finalize
    at e-contact.c line 346
  • #12 g_object_unref
    from /lib64/libgobject-2.0.so.0
  • #13 e_book_backend_modify_contacts_finish
    at e-book-backend.c line 1805
  • #14 data_book_complete_modify_contacts_cb
    at e-data-book.c line 880
  • #15 g_simple_async_result_complete
    from /lib64/libgio-2.0.so.0
  • #16 complete_in_idle_cb
    from /lib64/libgio-2.0.so.0
  • #17 g_main_context_dispatch
    from /lib64/libglib-2.0.so.0
  • #18 g_main_context_iterate.isra.23
    from /lib64/libglib-2.0.so.0
  • #19 g_main_loop_run
    from /lib64/libglib-2.0.so.0
  • #20 dbus_server_run_server
    at e-dbus-server.c line 222
  • #21 ffi_call_unix64
    from /lib64/libffi.so.6
  • #22 ffi_call
    from /lib64/libffi.so.6
  • #23 g_cclosure_marshal_generic_va
    from /lib64/libgobject-2.0.so.0
  • #24 _g_closure_invoke_va
    from /lib64/libgobject-2.0.so.0
  • #25 g_signal_emit_valist
    from /lib64/libgobject-2.0.so.0
  • #26 g_signal_emit
    from /lib64/libgobject-2.0.so.0
  • #27 e_dbus_server_run
    at e-dbus-server.c line 411
  • #28 main
    at evolution-addressbook-factory.c line 132

Reproduced on evolution 3.9.92
Comment 1 André Klapper 2013-09-17 09:05:23 UTC
Installing debug symbols for glib2 highly welcome, to get a better stacktrace.
Comment 2 Vadim Rutkovsky 2013-11-01 12:02:01 UTC
Reproduced on evolution-3.11.1-1.fc21:

Program terminated with signal SIGSEGV, Segmentation fault.

Thread 1 (Thread 0x7f485c1dea40 (LWP 13519))

  • #0 g_type_check_instance
    at gtype.c line 4082
  • #1 g_signal_handler_disconnect
    at gsignal.c line 2580
  • #2 e_alert_run_dialog
    at e-alert-dialog.c line 361
  • #3 e_alert_run_dialog_for_args
    at e-alert-dialog.c line 384
  • #4 g_closure_invoke
    at gclosure.c line 777
  • #5 signal_emit_unlocked_R
    at gsignal.c line 3516
  • #6 g_signal_emit_valist
    at gsignal.c line 3330
  • #7 g_signal_emit
    at gsignal.c line 3386
  • #8 eab_editor_contact_modified
    at eab-editor.c line 383
  • #9 contact_modified_cb
    at e-contact-editor.c line 3632
  • #10 contact_modified_ready_cb
    at e-contact-editor.c line 3658
  • #11 g_simple_async_result_complete
    at gsimpleasyncresult.c line 777
  • #12 complete_in_idle_cb_for_thread
    at gsimpleasyncresult.c line 845
  • #13 g_main_dispatch
    at gmain.c line 3065
  • #14 g_main_context_dispatch
    at gmain.c line 3639
  • #15 g_main_context_iterate
    at gmain.c line 3710
  • #16 g_main_loop_run
    at gmain.c line 3904
  • #17 gtk_main
    at gtkmain.c line 1158
  • #18 main
    at main.c line 681

Comment 3 Milan Crha 2014-10-20 15:52:51 UTC
I believe this is just another variant of the crash. The problem is that the Thread 13 does GTK+ calls in a dedicated thread, not in the main thread.

Thread 13 (Thread 0x7f14d27dc700 (LWP 5397))

  • #0 waitpid
    from /lib64/libc.so.6
  • #1 g_spawn_sync
    at gspawn.c line 399
  • #2 g_spawn_command_line_sync
    at gspawn.c line 721
  • #3 run_bug_buddy
    at gnome-segvhanlder.c line 240
  • #4 bugbuddy_segv_handle
    at gnome-segvhanlder.c line 191
  • #5 <signal handler called>
  • #6 pixman_op
    from /lib64/libpixman-1.so.0
  • #7 pixman_region32_union
    from /lib64/libpixman-1.so.0
  • #8 cairo_region_union
    from /lib64/libcairo.so.2
  • #9 gdk_window_invalidate_maybe_recurse_full
    from /lib64/libgdk-3.so.0
  • #10 gtk_widget_queue_draw_area
    from /lib64/libgtk-3.so.0
  • #11 gtk_widget_queue_draw
    from /lib64/libgtk-3.so.0
  • #12 gtk_widget_queue_resize
    from /lib64/libgtk-3.so.0
  • #13 gtk_container_child_set_property
    from /lib64/libgtk-3.so.0
  • #14 move_widget
    at e-contact-editor-dyntable.c line 112
  • #15 remove_empty_entries
    at e-contact-editor-dyntable.c line 325
  • #16 e_contact_editor_dyntable_set_max_entries
    at e-contact-editor-dyntable.c line 437
  • #17 sensitize_email
    at e-contact-editor.c line 1107
  • #18 sensitize_all
    at e-contact-editor.c line 3209
  • #19 notify_readonly_cb
    at e-contact-editor.c line 4715
  • #20 e_signal_connect_notify_cb
    at e-misc-utils.c line 2849
  • #21 g_cclosure_marshal_VOID__PARAM
    at gmarshal.c line 1042
  • #22 g_closure_invoke
    at gclosure.c line 768
  • #23 signal_emit_unlocked_R
    at gsignal.c line 3551
  • #24 g_signal_emit_valist
    at gsignal.c line 3307
  • #25 g_signal_emit
    at gsignal.c line 3363
  • #26 g_object_dispatch_properties_changed
    at gobject.c line 1053
  • #27 g_object_notify_by_spec_internal
    at gobject.c line 1147
  • #28 g_object_notify
    at gobject.c line 1194
  • #29 e_client_set_readonly
    at e-client.c line 1142
  • #30 book_client_dbus_proxy_property_changed
    at e-book-client.c line 581
  • #31 book_client_dbus_proxy_notify_cb
    at e-book-client.c line 633
  • #32 g_cclosure_marshal_VOID__PARAM
    at gmarshal.c line 1042
  • #33 g_closure_invoke
    at gclosure.c line 768
  • #34 signal_emit_unlocked_R
    at gsignal.c line 3551
  • #35 g_signal_emit_valist
    at gsignal.c line 3307
  • #36 g_signal_emit
    at gsignal.c line 3363
  • #37 g_object_dispatch_properties_changed
    at gobject.c line 1053
  • #38 g_object_notify_by_spec_internal
    at gobject.c line 1147
  • #39 g_object_notify
    at gobject.c line 1194
  • #40 e_dbus_address_book_proxy_g_properties_changed
    at e-dbus-address-book.c line 3270
  • #41 ffi_call_unix64
    from /lib64/libffi.so.6
  • #42 ffi_call
    from /lib64/libffi.so.6
  • #43 g_cclosure_marshal_generic
    at gclosure.c line 1445
  • #44 g_type_class_meta_marshal
    at gclosure.c line 961
  • #45 g_closure_invoke
    at gclosure.c line 768
  • #46 signal_emit_unlocked_R
    at gsignal.c line 3589
  • #47 g_signal_emit_valist
    at gsignal.c line 3307
  • #48 g_signal_emit
    at gsignal.c line 3363
  • #49 on_name_owner_changed
    at gdbusproxy.c line 1343
  • #50 emit_signal_instance_in_idle_cb
    at gdbusconnection.c line 3750
  • #51 g_idle_dispatch
    at gmain.c line 5319
  • #52 g_main_dispatch
    at gmain.c line 3064
  • #53 g_main_context_dispatch
    at gmain.c line 3663
  • #54 g_main_context_iterate
    at gmain.c line 3734
  • #55 g_main_loop_run
    at gmain.c line 3928
  • #56 book_client_dbus_thread
    at e-book-client.c line 323
  • #57 g_thread_proxy
    at gthread.c line 764
  • #58 start_thread
    from /lib64/libpthread.so.0
  • #59 clone
    from /lib64/libc.so.6

Comment 4 Milan Crha 2014-10-20 17:05:53 UTC
By the way, the initial crash happened in the evolution-addressbook-factory, while the other two in the evolution itself. I believe the initial crash is fixed now, within bug #725045, thus let's keep this for the evolution crash.
Comment 5 Milan Crha 2014-10-20 18:43:12 UTC
More investigation showed that this might not be anything new. The GObject::notify signal is delivered synchronously (like any other GObject signal) and because we changed the property in the GDBus' thread then the UI which was listening for the signal was invoked as well. Update EClient properties after GDBusProxy property change notifications on idle fixes the issue. (The only question is what else will break, if any code expects these notifications being propagated into EClient immediately; but it might be okay, because the GDBusProxy notifications are fully asynchronous, initiated by the server side, unexpected by the client).

Created commit 1281d31 in eds master (3.13.7+) [1]
Created commit 20b0a18 in eds evolution-data-server-3-12 (3.12.8+) [2]

[1] https://git.gnome.org/browse/evolution-data-server/commit/?id=1281d31
[2] https://git.gnome.org/browse/evolution-data-server/commit/?id=20b0a18