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




Reply via email to