rpms/evolution/F-13 evolution-2.30.1.2-mail-browser-crash.patch, NONE, 1.1 evolution.spec, 1.454, 1.455
Matthew Barnes
mbarnes at fedoraproject.org
Tue May 18 13:09:37 UTC 2010
- Previous message: rpms/file-roller/F-12 file-roller-2.28.2-gvfs-fuse.patch, NONE, 1.1 file-roller.spec, 1.164, 1.165
- Next message: rpms/midori/F-12 .cvsignore, 1.17, 1.18 midori.spec, 1.32, 1.33 sources, 1.17, 1.18
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: mbarnes
Update of /cvs/pkgs/rpms/evolution/F-13
In directory cvs01.phx2.fedoraproject.org:/tmp/cvs-serv18991
Modified Files:
evolution.spec
Added Files:
evolution-2.30.1.2-mail-browser-crash.patch
Log Message:
* Tue May 18 2010 Matthew Barnes <mbarnes at redhat.com> - 2.30.1-6.fc13
- Add patch for GNOME bug #618902 (mail browser window crash).
evolution-2.30.1.2-mail-browser-crash.patch:
e-mail-browser.c | 3 ++-
e-mail-reader.c | 55 +++++++++++++++++++++++++++++++++++--------------------
message-list.c | 3 +--
3 files changed, 38 insertions(+), 23 deletions(-)
--- NEW FILE evolution-2.30.1.2-mail-browser-crash.patch ---
diff -up evolution-2.30.1.2/mail/e-mail-browser.c.mail-browser-crash evolution-2.30.1.2/mail/e-mail-browser.c
--- evolution-2.30.1.2/mail/e-mail-browser.c.mail-browser-crash 2010-04-27 07:43:02.000000000 -0400
+++ evolution-2.30.1.2/mail/e-mail-browser.c 2010-05-18 09:04:12.033130077 -0400
@@ -446,7 +446,8 @@ mail_browser_dispose (GObject *object)
}
if (priv->message_list != NULL) {
- g_object_unref (priv->message_list);
+ /* This will cancel a regen operation. */
+ gtk_widget_destroy (priv->message_list);
priv->message_list = NULL;
}
diff -up evolution-2.30.1.2/mail/e-mail-reader.c.mail-browser-crash evolution-2.30.1.2/mail/e-mail-reader.c
--- evolution-2.30.1.2/mail/e-mail-reader.c.mail-browser-crash 2010-05-08 10:58:11.961137959 -0400
+++ evolution-2.30.1.2/mail/e-mail-reader.c 2010-05-18 09:04:12.053130003 -0400
@@ -52,7 +52,8 @@
#include "mail/message-list.h"
#define E_MAIL_READER_GET_PRIVATE(obj) \
- (mail_reader_get_private (G_OBJECT (obj)))
+ ((EMailReaderPrivate *) g_object_get_qdata \
+ (G_OBJECT (obj), quark_private))
typedef struct _EMailReaderPrivate EMailReaderPrivate;
@@ -92,31 +93,24 @@ static GQuark quark_private;
static guint signals[LAST_SIGNAL];
static void
-mail_reader_finalize (EMailReaderPrivate *priv)
+mail_reader_destroy (GObject *object)
{
- if (priv->message_selected_timeout_id > 0)
- g_source_remove (priv->message_selected_timeout_id);
-
- g_free (priv->mark_read_message_uid);
-
- g_slice_free (EMailReaderPrivate, priv);
+ /* This will free the private struct. */
+ g_object_set_qdata (object, quark_private, NULL);
}
-static EMailReaderPrivate *
-mail_reader_get_private (GObject *object)
+static void
+mail_reader_private_free (EMailReaderPrivate *priv)
{
- EMailReaderPrivate *priv;
+ if (priv->message_selected_timeout_id > 0)
+ g_source_remove (priv->message_selected_timeout_id);
- priv = g_object_get_qdata (object, quark_private);
+ if (priv->retrieving_message_operation_id > 0)
+ mail_msg_cancel (priv->retrieving_message_operation_id);
- if (G_UNLIKELY (priv == NULL)) {
- priv = g_slice_new0 (EMailReaderPrivate);
- g_object_set_qdata_full (
- object, quark_private, priv,
- (GDestroyNotify) mail_reader_finalize);
- }
+ g_free (priv->mark_read_message_uid);
- return priv;
+ g_slice_free (EMailReaderPrivate, priv);
}
static void
@@ -1830,6 +1824,14 @@ mail_reader_message_loaded_cb (CamelFold
priv = E_MAIL_READER_GET_PRIVATE (reader);
+ /* If the private struct is NULL, the EMailReader was destroyed
+ * while we were loading the message and we're likely holding the
+ * last reference. Nothing to do but drop the reference. */
+ if (priv == NULL) {
+ g_object_unref (reader);
+ return;
+ }
+
html_display = e_mail_reader_get_html_display (reader);
message_list = e_mail_reader_get_message_list (reader);
@@ -2551,7 +2553,7 @@ e_mail_reader_get_type (void)
type = g_type_register_static (
G_TYPE_INTERFACE, "EMailReader", &type_info, 0);
- g_type_interface_add_prerequisite (type, G_TYPE_OBJECT);
+ g_type_interface_add_prerequisite (type, GTK_TYPE_OBJECT);
}
return type;
@@ -2726,6 +2728,19 @@ e_mail_reader_init (EMailReader *reader)
g_signal_connect_swapped (
message_list, "selection-change",
G_CALLBACK (e_mail_reader_changed), reader);
+
+ /* Install a private struct for storing things like flags and
+ * timeout and asynchronous operation IDs. We delete it when
+ * the EMailReader is destroyed rather than finalized so that
+ * asynchronous callbacks holding a reference can detect that
+ * the reader has been destroyed and drop their reference. */
+ g_object_set_qdata_full (
+ G_OBJECT (reader), quark_private,
+ g_slice_new0 (EMailReaderPrivate),
+ (GDestroyNotify) mail_reader_private_free);
+ g_signal_connect (
+ reader, "destroy",
+ G_CALLBACK (mail_reader_destroy), NULL);
}
void
diff -up evolution-2.30.1.2/mail/message-list.c.mail-browser-crash evolution-2.30.1.2/mail/message-list.c
--- evolution-2.30.1.2/mail/message-list.c.mail-browser-crash 2010-04-26 09:13:17.000000000 -0400
+++ evolution-2.30.1.2/mail/message-list.c 2010-05-18 09:04:12.066888552 -0400
@@ -4900,7 +4900,7 @@ mail_regen_list (MessageList *ml, const
#endif
m = mail_msg_new (®en_list_info);
- m->ml = ml;
+ m->ml = g_object_ref (ml);
m->search = g_strdup (search);
m->hideexpr = g_strdup (hideexpr);
m->changes = changes;
@@ -4908,7 +4908,6 @@ mail_regen_list (MessageList *ml, const
m->hidedel = ml->hidedeleted;
m->hidejunk = ml->hidejunk;
m->thread_subject = gconf_client_get_bool (gconf, "/apps/evolution/mail/display/thread_subject", NULL);
- g_object_ref(ml);
m->folder = ml->folder;
camel_object_ref(m->folder);
m->last_row = -1;
Index: evolution.spec
===================================================================
RCS file: /cvs/pkgs/rpms/evolution/F-13/evolution.spec,v
retrieving revision 1.454
retrieving revision 1.455
diff -u -p -r1.454 -r1.455
--- evolution.spec 8 May 2010 15:59:40 -0000 1.454
+++ evolution.spec 18 May 2010 13:09:37 -0000 1.455
@@ -39,7 +39,7 @@
Name: evolution
Version: 2.30.1
-Release: 5%{?dist}
+Release: 6%{?dist}
Group: Applications/Productivity
Summary: Mail and calendar client for GNOME
License: GPLv2+ and GFDL
@@ -71,6 +71,9 @@ Patch14: evolution-2.30.1-help-contents.
# RH bug #588004 / GNOME bug #618113
Patch15: evolution-2.30.1.2-alarm-notify-icons.patch
+# GNOME bug #618902
+Patch16: evolution-2.30.1.2-mail-browser-crash.patch
+
## Dependencies ###
Requires(pre): GConf2
@@ -239,6 +242,7 @@ This package contains the plugin to impo
%patch13 -p1 -b .notjunk-icon
%patch14 -p1 -b .help-contents
%patch15 -p1 -b .alarm-notify-icons
+%patch16 -p1 -b .mail-browser-crash
mkdir -p krb5-fakeprefix/include
mkdir -p krb5-fakeprefix/lib
@@ -690,6 +694,9 @@ rm -rf $RPM_BUILD_ROOT
%endif
%changelog
+* Tue May 18 2010 Matthew Barnes <mbarnes at redhat.com> - 2.30.1-6.fc13
+- Add patch for GNOME bug #618902 (mail browser window crash).
+
* Sat May 08 2010 Matthew Barnes <mbarnes at redhat.com> - 2.30.1-5.fc13
- Add patch for RH bug #588004 (missing icon in alarm dialogs).
- Previous message: rpms/file-roller/F-12 file-roller-2.28.2-gvfs-fuse.patch, NONE, 1.1 file-roller.spec, 1.164, 1.165
- Next message: rpms/midori/F-12 .cvsignore, 1.17, 1.18 midori.spec, 1.32, 1.33 sources, 1.17, 1.18
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the scm-commits
mailing list