pacho 14/03/16 14:41:07 Added: evolution-3.10.4-nntp-outbox.patch evolution-3.10.4-main-ui.patch evolution-3.10.4-imap-crash.patch Log: Apply some fixes from upstream 3.8 branch that also solves crash with IMAP folder creation (#504062 by Jaroslaw Strauchmann) (Portage version: 2.2.8-r1/cvs/Linux x86_64, signed Manifest commit with key A188FBD4)
Revision Changes Path 1.1 mail-client/evolution/files/evolution-3.10.4-nntp-outbox.patch file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/mail-client/evolution/files/evolution-3.10.4-nntp-outbox.patch?rev=1.1&view=markup plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/mail-client/evolution/files/evolution-3.10.4-nntp-outbox.patch?rev=1.1&content-type=text/plain Index: evolution-3.10.4-nntp-outbox.patch =================================================================== >From 9de8f573e9eba07a096c7f97f97bb5ac876278c8 Mon Sep 17 00:00:00 2001 From: Milan Crha <mc...@redhat.com> Date: Mon, 10 Feb 2014 16:57:28 +0000 Subject: Bug #722041 - NNTP Messages are silently dropped from Outbox --- diff --git a/libemail-engine/mail-ops.c b/libemail-engine/mail-ops.c index 4f3dbd3..4db5dae 100644 --- a/libemail-engine/mail-ops.c +++ b/libemail-engine/mail-ops.c @@ -682,22 +682,18 @@ mail_send_message (struct _send_queue_msg *m, info = camel_message_info_new (NULL); camel_message_info_set_flags (info, CAMEL_MESSAGE_SEEN, ~0); - for (header = xev; header; header = header->next) { + for (header = xev; header && !local_error; header = header->next) { gchar *uri; if (strcmp (header->name, "X-Evolution-PostTo") != 0) continue; - /* TODO: don't lose errors */ - uri = g_strstrip (g_strdup (header->value)); - /* FIXME Not passing a GCancellable or GError here. */ folder = e_mail_session_uri_to_folder_sync ( - m->session, uri, 0, NULL, NULL); + m->session, uri, 0, cancellable, &local_error); if (folder != NULL) { - /* FIXME Not passing a GCancellable or GError here. */ camel_folder_append_message_sync ( - folder, message, info, NULL, NULL, NULL); + folder, message, info, NULL, cancellable, &local_error); g_object_unref (folder); folder = NULL; } @@ -707,7 +703,7 @@ mail_send_message (struct _send_queue_msg *m, /* post process */ mail_tool_restore_xevolution_headers (message, xev); - if (driver) { + if (local_error == NULL && driver) { camel_filter_driver_filter_message ( driver, message, info, NULL, NULL, NULL, "", cancellable, &local_error); @@ -735,10 +731,9 @@ mail_send_message (struct _send_queue_msg *m, } } - if (provider == NULL - || !(provider->flags & CAMEL_PROVIDER_DISABLE_SENT_FOLDER)) { + if (local_error == NULL && (provider == NULL + || !(provider->flags & CAMEL_PROVIDER_DISABLE_SENT_FOLDER))) { CamelFolder *local_sent_folder; - GError *local_error = NULL; local_sent_folder = e_mail_session_get_local_folder ( m->session, E_MAIL_LOCAL_FOLDER_SENT); @@ -798,6 +793,7 @@ mail_send_message (struct _send_queue_msg *m, _("Failed to append to " "local 'Sent' folder: %s"), local_error->message); + g_clear_error (&local_error); } } } @@ -836,7 +832,7 @@ mail_send_message (struct _send_queue_msg *m, camel_folder_synchronize_sync (queue, FALSE, NULL, NULL); } - if (err->len > 0) { + if (local_error == NULL && err->len > 0) { /* set the culmulative exception report */ g_set_error ( &local_error, CAMEL_ERROR, -- cgit v0.9.2 1.1 mail-client/evolution/files/evolution-3.10.4-main-ui.patch file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/mail-client/evolution/files/evolution-3.10.4-main-ui.patch?rev=1.1&view=markup plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/mail-client/evolution/files/evolution-3.10.4-main-ui.patch?rev=1.1&content-type=text/plain Index: evolution-3.10.4-main-ui.patch =================================================================== >From 37a95e0e6b74fa9fe1692c788983142d8d4774d4 Mon Sep 17 00:00:00 2001 From: Milan Crha <mc...@redhat.com> Date: Mon, 10 Feb 2014 14:59:24 +0000 Subject: Bug #724023 - Run EMailFormatter in the main/UI thread 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. --- diff --git a/em-format/e-mail-part-attachment-bar.c b/em-format/e-mail-part-attachment-bar.c index 5cebd9b..57f49be 100644 --- a/em-format/e-mail-part-attachment-bar.c +++ b/em-format/e-mail-part-attachment-bar.c @@ -60,12 +60,7 @@ e_mail_part_attachment_bar_class_init (EMailPartAttachmentBarClass *class) static void e_mail_part_attachment_bar_init (EMailPartAttachmentBar *part) { - GtkTreeModel *tree_model; - part->priv = E_MAIL_PART_ATTACHMENT_BAR_GET_PRIVATE (part); - - tree_model = e_attachment_store_new (); - part->priv->store = E_ATTACHMENT_STORE (tree_model); } EMailPart * @@ -84,6 +79,18 @@ e_mail_part_attachment_bar_get_store (EMailPartAttachmentBar *part) { g_return_val_if_fail (E_IS_MAIL_PART_ATTACHMENT_BAR (part), NULL); + if (!part->priv->store) { + GtkTreeModel *tree_model; + + /* Create the store only on demand. The EMailParser runs in a dedicated + thread, but the EAttachmentStore is a GtkWidget descendant, which should + be manipulated only from the main/UI thread, thus postpone its creating + until it's really needed, which might be during the EMailFormatter run, + which runs from the main/UI thread. */ + tree_model = e_attachment_store_new (); + part->priv->store = E_ATTACHMENT_STORE (tree_model); + } + return part->priv->store; } diff --git a/mail/e-mail-request.c b/mail/e-mail-request.c index bfbedc3..615bce3 100644 --- a/mail/e-mail-request.c +++ b/mail/e-mail-request.c @@ -365,9 +365,12 @@ mail_request_send_async (SoupRequest *request, simple, handle_contact_photo_request, G_PRIORITY_DEFAULT, cancellable); } else { - g_simple_async_result_run_in_thread ( - simple, handle_mail_request, - G_PRIORITY_DEFAULT, cancellable); + /* Process e-mail mail requests in this thread, which should be + the main/UI thread, because any EMailFormatter can create + GtkWidget-s, or manipulate with them, which should be always + done in the main/UI thread. */ + handle_mail_request (simple, G_OBJECT (request), cancellable); + g_simple_async_result_complete_in_idle (simple); } g_object_unref (simple); -- cgit v0.9.2 1.1 mail-client/evolution/files/evolution-3.10.4-imap-crash.patch file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/mail-client/evolution/files/evolution-3.10.4-imap-crash.patch?rev=1.1&view=markup plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/mail-client/evolution/files/evolution-3.10.4-imap-crash.patch?rev=1.1&content-type=text/plain Index: evolution-3.10.4-imap-crash.patch =================================================================== >From 5e4b28e2fae285fa632ab189707489e0df8d79aa Mon Sep 17 00:00:00 2001 From: Fabiano FidĂȘncio <fiden...@redhat.com> Date: Tue, 21 Jan 2014 14:48:54 +0000 Subject: Bug #722698 - Crash creating a new folder --- diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c index b15041a..cd7f67e 100644 --- a/mail/em-folder-tree.c +++ b/mail/em-folder-tree.c @@ -1108,15 +1108,27 @@ folder_tree_dispose (GObject *object) { EMFolderTreePrivate *priv; GtkTreeModel *model; + GtkTreeSelection *selection; priv = EM_FOLDER_TREE_GET_PRIVATE (object); model = gtk_tree_view_get_model (GTK_TREE_VIEW (object)); + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (object)); if (priv->loaded_row_id != 0) { g_signal_handler_disconnect (model, priv->loaded_row_id); priv->loaded_row_id = 0; } + if (priv->loading_row_id != 0) { + g_signal_handler_disconnect (model, priv->loading_row_id); + priv->loading_row_id = 0; + } + + if (priv->selection_changed_handler_id != 0) { + g_signal_handler_disconnect (selection, priv->selection_changed_handler_id); + priv->selection_changed_handler_id = 0; + } + if (priv->autoscroll_id != 0) { g_source_remove (priv->autoscroll_id); priv->autoscroll_id = 0; -- cgit v0.9.2