aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/itip-formatter/itip-formatter.c
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2011-08-03 22:59:22 +0800
committerMilan Crha <mcrha@redhat.com>2011-08-03 23:04:31 +0800
commitf2c34011833c291568023f2a52a65f540f59671f (patch)
treeba10673ba228bdcbb2c28d40c007c4e776f4803b /plugins/itip-formatter/itip-formatter.c
parent903b8e69b0aba3192dcc9c99e7971f47b0f6be33 (diff)
downloadgsoc2013-evolution-f2c34011833c291568023f2a52a65f540f59671f.tar
gsoc2013-evolution-f2c34011833c291568023f2a52a65f540f59671f.tar.gz
gsoc2013-evolution-f2c34011833c291568023f2a52a65f540f59671f.tar.bz2
gsoc2013-evolution-f2c34011833c291568023f2a52a65f540f59671f.tar.lz
gsoc2013-evolution-f2c34011833c291568023f2a52a65f540f59671f.tar.xz
gsoc2013-evolution-f2c34011833c291568023f2a52a65f540f59671f.tar.zst
gsoc2013-evolution-f2c34011833c291568023f2a52a65f540f59671f.zip
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.
Diffstat (limited to 'plugins/itip-formatter/itip-formatter.c')
-rw-r--r--plugins/itip-formatter/itip-formatter.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/plugins/itip-formatter/itip-formatter.c b/plugins/itip-formatter/itip-formatter.c
index 46b7abb3a3..82bc373de7 100644
--- a/plugins/itip-formatter/itip-formatter.c
+++ b/plugins/itip-formatter/itip-formatter.c
@@ -803,8 +803,9 @@ get_object_without_rid_ready_cb (GObject *source_object, GAsyncResult *result, g
icalcomp = NULL;
if (g_error_matches (error, E_CLIENT_ERROR, E_CLIENT_ERROR_CANCELLED) ||
- g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
- g_error_free (error);
+ g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED) ||
+ g_cancellable_is_cancelled (fd->cancellable)) {
+ g_clear_error (&error);
find_cal_update_ui (fd, cal_client);
decrease_find_data (fd);
return;
@@ -843,7 +844,8 @@ get_object_with_rid_ready_cb (GObject *source_object, GAsyncResult *result, gpoi
icalcomp = NULL;
if (g_error_matches (error, E_CLIENT_ERROR, E_CLIENT_ERROR_CANCELLED) ||
- g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+ g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED) ||
+ g_cancellable_is_cancelled (fd->cancellable)) {
g_error_free (error);
find_cal_update_ui (fd, cal_client);
decrease_find_data (fd);
@@ -887,6 +889,12 @@ get_object_list_ready_cb (GObject *source_object, GAsyncResult *result, gpointer
if (!e_cal_client_get_object_list_finish (cal_client, result, &objects, &error))
objects = NULL;
+ if (g_cancellable_is_cancelled (fd->cancellable)) {
+ g_clear_error (&error);
+ decrease_find_data (fd);
+ return;
+ }
+
if (error) {
if (g_error_matches (error, E_CLIENT_ERROR, E_CLIENT_ERROR_CANCELLED) ||
g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
@@ -926,6 +934,12 @@ find_cal_opened_cb (GObject *source_object, GAsyncResult *result, gpointer user_
}
}
+ if (g_cancellable_is_cancelled (fd->cancellable)) {
+ g_clear_error (&error);
+ decrease_find_data (fd);
+ return;
+ }
+
if (error) {
/* FIXME Do we really want to warn here? If we fail
* to find the item, this won't be cleared but the