From f2c34011833c291568023f2a52a65f540f59671f Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 3 Aug 2011 16:59:22 +0200 Subject: Avoid crashes when moving between messages quickly The itip-formatter part is clean, but the one for attachment_button can still introduce runtime warnings, which requires more changes and rethinking of this all, which I prefer to postpone, the best after WebKit work will land, because it also may change most of the mail formatting code (I guess). It doesn't crash, at least. --- mail/em-format-html.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'mail/em-format-html.c') diff --git a/mail/em-format-html.c b/mail/em-format-html.c index 4a34aa0f28..d79fa450bc 100644 --- a/mail/em-format-html.c +++ b/mail/em-format-html.c @@ -157,6 +157,7 @@ struct _format_msg { CamelFolder *folder; gchar *uid; CamelMimeMessage *message; + gboolean cancelled; }; static gchar * @@ -177,8 +178,10 @@ efh_format_exec (struct _format_msg *m, CamelURL *base; gchar *content; - if (m->format->priv->web_view == NULL) + if (m->format->priv->web_view == NULL) { + m->cancelled = TRUE; return; + } format = EM_FORMAT (m->format); stream = CAMEL_STREAM (m->estream); @@ -265,6 +268,10 @@ efh_format_exec (struct _format_msg *m, (CamelStream *) m->estream, "\n\n", cancellable, NULL); camel_stream_close ((CamelStream *) m->estream, cancellable, NULL); + if (g_cancellable_is_cancelled (cancellable)) { + m->cancelled = TRUE; + m->estream->sync.cancel = TRUE; + } g_object_unref (m->estream); m->estream = NULL; } @@ -274,6 +281,7 @@ efh_format_exec (struct _format_msg *m, d(printf("out of jobs, done\n")); format->pending_uri_level = puri_level; + m->cancelled = m->cancelled || g_cancellable_is_cancelled (cancellable); } static void @@ -294,6 +302,8 @@ efh_format_free (struct _format_msg *m) g_object_unref (m->format); if (m->estream) { camel_stream_close ((CamelStream *) m->estream, NULL, NULL); + if (m->cancelled) + m->estream->sync.cancel = TRUE; g_object_unref (m->estream); } if (m->folder) -- cgit v1.2.3