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 724023 - [abrt] Run EMailFormatter in the main/UI thread
[abrt] Run EMailFormatter in the main/UI thread
Status: RESOLVED FIXED
Product: evolution
Classification: Applications
Component: Mailer
3.10.x (obsolete)
Other Linux
: Normal critical
: ---
Assigned To: evolution-mail-maintainers
Evolution QA team
Depends on:
Blocks:
 
 
Reported: 2014-02-10 11:46 UTC by Milan Crha
Modified: 2014-02-10 15:22 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Milan Crha 2014-02-10 11:46:22 UTC
Moving this from a downstream bug report:
https://bugzilla.redhat.com/show_bug.cgi?id=1063216

Description of problem:
just browsing mail.

Version-Release number of selected component:
evolution-3.10.3-1.fc20

Additional info:
reporter:       libreport-2.1.12
backtrace_rating: 4
cmdline:        evolution
crash_function: _g_log_abort
executable:     /usr/bin/evolution
kernel:         3.12.10-300.fc20.x86_64

Core was generated by `evolution'.
Program terminated with signal SIGABRT, Aborted.

Thread 1 (Thread 0x7f95af1d0700 (LWP 2669))

  • #0 __GI_raise
    at ../nptl/sysdeps/unix/sysv/linux/raise.c line 56
  • #1 __GI_abort
    at abort.c line 89
  • #2 _g_log_abort
    at gmessages.c line 255
  • #3 g_assertion_message
  • #4 g_assertion_message_expr
  • #5 gtk_widget_real_map
    at gtkwidget.c line 11531
  • #6 _g_closure_invoke_va
    at gclosure.c line 840
  • #7 g_signal_emit_valist
    at gsignal.c line 3238
  • #8 g_signal_emit
    at gsignal.c line 3386
  • #9 gtk_widget_map
    at gtkwidget.c line 4528
  • #10 gtk_box_forall
    at gtkbox.c line 2096
  • #11 gtk_container_map
    at gtkcontainer.c line 3387
  • #12 _g_closure_invoke_va
    at gclosure.c line 840
  • #13 g_signal_emit_valist
    at gsignal.c line 3238
  • #14 g_signal_emit
    at gsignal.c line 3386
  • #15 gtk_widget_map
    at gtkwidget.c line 4528
  • #16 gtk_expander_map
    at gtkexpander.c line 794
  • #17 _g_closure_invoke_va
    at gclosure.c line 840
  • #18 g_signal_emit_valist
    at gsignal.c line 3238
  • #19 g_signal_emit
    at gsignal.c line 3386
  • #20 gtk_widget_map
    at gtkwidget.c line 4528
  • #21 gtk_box_forall
    at gtkbox.c line 2096
  • #22 gtk_container_map
    at gtkcontainer.c line 3387
  • #23 _g_closure_invoke_va
    at gclosure.c line 840
  • #24 g_signal_emit_valist
    at gsignal.c line 3238
  • #25 g_signal_emit
    at gsignal.c line 3386
  • #26 gtk_widget_map
    at gtkwidget.c line 4528
  • #27 gtk_box_forall
    at gtkbox.c line 2106
  • #28 gtk_container_map
    at gtkcontainer.c line 3387
  • #29 _g_closure_invoke_va
    at gclosure.c line 840
  • #30 g_signal_emit_valist
    at gsignal.c line 3238
  • #31 g_signal_emit
    at gsignal.c line 3386
  • #32 gtk_widget_map
    at gtkwidget.c line 4528
  • #33 gtk_box_forall
    at gtkbox.c line 2096
  • #34 gtk_container_map
    at gtkcontainer.c line 3387
  • #35 _g_closure_invoke_va
    at gclosure.c line 840
  • #36 g_signal_emit_valist
    at gsignal.c line 3238
  • #37 g_signal_emit
    at gsignal.c line 3386
  • #38 gtk_widget_map
    at gtkwidget.c line 4528
  • #39 g_closure_invoke
    at gclosure.c line 777
  • #40 signal_emit_unlocked_R
    at gsignal.c line 3516
  • #41 g_signal_emit_valist
    at gsignal.c line 3330
  • #42 g_signal_emit
    at gsignal.c line 3386
  • #43 gtk_widget_show
    at gtkwidget.c line 4336
  • #44 mail_display_attachment_count_changed
    at e-mail-display.c line 488
  • #45 g_closure_invoke
    at gclosure.c line 777
  • #46 signal_emit_unlocked_R
    at gsignal.c line 3586
  • #47 g_signal_emit_valist
    at gsignal.c line 3330
  • #48 g_signal_emit
    at gsignal.c line 3386
  • #49 g_object_dispatch_properties_changed
    at gobject.c line 1047
  • #50 g_object_notify_queue_thaw
    at gobject.c line 292
  • #51 g_object_thaw_notify
    at gobject.c line 1278
  • #52 e_attachment_store_add_attachment
    at e-attachment-store.c line 229
  • #53 emfe_attachment_format
    at e-mail-formatter-attachment.c line 168
  • #54 e_mail_formatter_format_as
    at e-mail-formatter.c line 999
  • #55 mail_formatter_run
    at e-mail-formatter.c line 418
  • #56 e_mail_formatter_format_sync
    at e-mail-formatter.c line 836
  • #57 handle_mail_request
    at e-mail-request.c line 183
  • #58 run_in_thread
    at gsimpleasyncresult.c line 871
  • #59 io_job_thread
    at gioscheduler.c line 89
  • #60 g_task_thread_pool_thread
    at gtask.c line 1245
  • #61 g_thread_pool_thread_proxy
    at gthreadpool.c line 309
  • #62 g_thread_proxy
    at gthread.c line 798
  • #63 start_thread
    at pthread_create.c line 309
  • #64 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 111

Comment 1 Milan Crha 2014-02-10 11:47:40 UTC
I see in the backtrace that there are done GTK+ calls in a dedicated thread, while such calls can be done only in the main (UI) thread, which leads to this crash.
Comment 2 Milan Crha 2014-02-10 15:22:38 UTC
Any GtkWidget creation or manipulation should be done exclusively from the main/UI thread, thus make sure it is done that way. Of course, evolution can freeze for a little time (depends on the message size), until its formatting is done. It's unnoticeable with usual messages.

Created commit 614d161 in evo master (3.11.90+) [1]
Created commit 37a95e0 in evo gnome-3-10 (3.10.5+)

[1] https://git.gnome.org/browse/evolution/commit/?id=614d161