[anjal] Fix crash while canceling downloaded messages.
- From: Srinivasa Ragavan <sragavan src gnome org>
- To: svn-commits-list gnome org
- Subject: [anjal] Fix crash while canceling downloaded messages.
- Date: Mon, 18 May 2009 14:55:31 -0400 (EDT)
commit a18585363c4c4c1da8c3a99ebf2270138d83795c
Author: Srinivasa Ragavan <sragavan novell com>
Date: Tue May 19 00:30:27 2009 +0530
Fix crash while canceling downloaded messages.
---
evo-anjal-2-27.patch | 42 +++++++++++++++++++++++++++++++++++++++++-
evo-anjal.patch | 42 +++++++++++++++++++++++++++++++++++++++++-
src/mail-message-view.c | 10 ++++++++--
3 files changed, 90 insertions(+), 4 deletions(-)
diff --git a/evo-anjal-2-27.patch b/evo-anjal-2-27.patch
index 1ed2307..51ca1b0 100644
--- a/evo-anjal-2-27.patch
+++ b/evo-anjal-2-27.patch
@@ -1716,7 +1716,7 @@ index 556715d..7d7547c 100644
#define ONLINE 1
diff --git a/mail/mail-ops.c b/mail/mail-ops.c
-index a8aa14d..42d778a 100644
+index a8aa14d..6ab48a0 100644
--- a/mail/mail-ops.c
+++ b/mail/mail-ops.c
@@ -73,6 +73,8 @@
@@ -1747,6 +1747,46 @@ index a8aa14d..42d778a 100644
m = mail_msg_new (&append_mail_info);
m->folder = folder;
+@@ -1879,7 +1880,7 @@ typedef void (*get_done)(CamelFolder *folder, const char *uid, CamelMimeMessage
+ static void
+ get_messagex_done (struct _get_message_msg *m)
+ {
+- if (m->done) {
++ if (m->done && !camel_operation_cancel_check (m->cancel)) {
+ get_done done = (get_done)m->done;
+ done(m->folder, m->uid, m->message, m->data, &m->base.ex);
+ }
+@@ -1895,7 +1896,7 @@ static MailMsgInfo get_messagex_info = {
+
+ /* This is temporary, to avoid having to rewrite everything that uses
+ mail_get_message; it adds an exception argument to the callback */
+-void
++CamelOperation *
+ mail_get_messagex(CamelFolder *folder, const char *uid, void (*done) (CamelFolder *folder, const char *uid, CamelMimeMessage *msg, void *data, CamelException *),
+ void *data, MailMsgDispatchFunc dispatch)
+ {
+@@ -1910,6 +1911,8 @@ mail_get_messagex(CamelFolder *folder, const char *uid, void (*done) (CamelFolde
+ m->cancel = camel_operation_new(NULL, NULL);
+
+ dispatch (m);
++
++ return m->cancel;
+ }
+
+ /* ********************************************************************** */
+diff --git a/mail/mail-ops.h b/mail/mail-ops.h
+index e615a91..9ee3899 100644
+--- a/mail/mail-ops.h
++++ b/mail/mail-ops.h
+@@ -57,7 +57,7 @@ void mail_get_message (CamelFolder *folder, const char *uid,
+ void *data,
+ MailMsgDispatchFunc dispatch);
+
+-void
++CamelOperation *
+ mail_get_messagex(CamelFolder *folder, const char *uid,
+ void (*done) (CamelFolder *folder, const char *uid, CamelMimeMessage *msg, void *data, CamelException *),
+ void *data, MailMsgDispatchFunc dispatch);
diff --git a/widgets/misc/Makefile.am b/widgets/misc/Makefile.am
index 124c736..b0486ab 100644
--- a/widgets/misc/Makefile.am
diff --git a/evo-anjal.patch b/evo-anjal.patch
index 1009661..b8a1d7b 100644
--- a/evo-anjal.patch
+++ b/evo-anjal.patch
@@ -1759,7 +1759,7 @@ index 12b4019..22b786f 100644
#define ONLINE 1
diff --git a/mail/mail-ops.c b/mail/mail-ops.c
-index 7c5f033..d280daa 100644
+index 7c5f033..ebf6018 100644
--- a/mail/mail-ops.c
+++ b/mail/mail-ops.c
@@ -73,6 +73,8 @@
@@ -1790,6 +1790,46 @@ index 7c5f033..d280daa 100644
m = mail_msg_new (&append_mail_info);
m->folder = folder;
+@@ -1873,7 +1874,7 @@ typedef void (*get_done)(CamelFolder *folder, const char *uid, CamelMimeMessage
+ static void
+ get_messagex_done (struct _get_message_msg *m)
+ {
+- if (m->done) {
++ if (m->done && !camel_operation_cancel_check (m->cancel)) {
+ get_done done = (get_done)m->done;
+ done(m->folder, m->uid, m->message, m->data, &m->base.ex);
+ }
+@@ -1889,7 +1890,7 @@ static MailMsgInfo get_messagex_info = {
+
+ /* This is temporary, to avoid having to rewrite everything that uses
+ mail_get_message; it adds an exception argument to the callback */
+-void
++CamelOperation *
+ mail_get_messagex(CamelFolder *folder, const char *uid, void (*done) (CamelFolder *folder, const char *uid, CamelMimeMessage *msg, void *data, CamelException *),
+ void *data, MailMsgDispatchFunc dispatch)
+ {
+@@ -1904,6 +1905,8 @@ mail_get_messagex(CamelFolder *folder, const char *uid, void (*done) (CamelFolde
+ m->cancel = camel_operation_new(NULL, NULL);
+
+ dispatch (m);
++
++ return m->cancel;
+ }
+
+ /* ********************************************************************** */
+diff --git a/mail/mail-ops.h b/mail/mail-ops.h
+index e615a91..9ee3899 100644
+--- a/mail/mail-ops.h
++++ b/mail/mail-ops.h
+@@ -57,7 +57,7 @@ void mail_get_message (CamelFolder *folder, const char *uid,
+ void *data,
+ MailMsgDispatchFunc dispatch);
+
+-void
++CamelOperation *
+ mail_get_messagex(CamelFolder *folder, const char *uid,
+ void (*done) (CamelFolder *folder, const char *uid, CamelMimeMessage *msg, void *data, CamelException *),
+ void *data, MailMsgDispatchFunc dispatch);
diff --git a/widgets/misc/Makefile.am b/widgets/misc/Makefile.am
index 95acd8b..2d92b1e 100644
--- a/widgets/misc/Makefile.am
diff --git a/src/mail-message-view.c b/src/mail-message-view.c
index 44c24f9..ad4507d 100644
--- a/src/mail-message-view.c
+++ b/src/mail-message-view.c
@@ -65,6 +65,7 @@ struct _MailMessageViewPrivate {
GtkWidget *unread_image;
char *bold[2];
char *normal[2];
+ CamelOperation *cancel;
};
typedef enum {
@@ -102,6 +103,7 @@ mail_message_view_init (MailMessageView *shell)
{
shell->priv = g_new0(MailMessageViewPrivate, 1);
shell->priv->spinner = NULL;
+ shell->priv->cancel = NULL;
shell->type = MAIL_VIEW_MESSAGE;
shell->uri = "mail://";
shell->composer = NULL;
@@ -112,7 +114,10 @@ mail_message_view_finalize (GObject *object)
{
MailMessageView *shell = (MailMessageView *)object;
MailMessageViewPrivate *priv = shell->priv;
-
+
+ if (shell->priv->cancel) {
+ camel_operation_cancel(shell->priv->cancel);
+ }
g_object_unref (shell->efwd);
g_free (priv->uid);
g_free (priv->normal[0]);
@@ -175,6 +180,7 @@ static void
mmv_message_opened(CamelFolder *folder, const char *uid, CamelMimeMessage *msg, void *data, CamelException *ex)
{
MailMessageView *shell = (MailMessageView *)data;
+ shell->priv->cancel = NULL;
mail_indicate_new_mail (FALSE);
em_format_webkit_set_message_view (shell->efwd, shell, shell->body);
em_format_format((EMFormat *)shell->efwd, folder, uid, msg);
@@ -221,7 +227,7 @@ mmv_show (MailMessageView *mmv)
{
if (!mmv->priv->msg) {
gtk_widget_show(mmv->priv->spinner);
- mail_get_messagex(mmv->priv->folder, mmv->priv->uid, mmv_message_opened, mmv, mail_msg_fast_ordered_push);
+ mmv->priv->cancel = mail_get_messagex(mmv->priv->folder, mmv->priv->uid, mmv_message_opened, mmv, mail_msg_fast_ordered_push);
}
gtk_widget_show (mmv->body);
gtk_widget_show_all (mmv->footer);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]