diff options
author | Milan Crha <mcrha@redhat.com> | 2011-08-03 22:59:22 +0800 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2011-08-03 23:04:31 +0800 |
commit | f2c34011833c291568023f2a52a65f540f59671f (patch) | |
tree | ba10673ba228bdcbb2c28d40c007c4e776f4803b /plugins/itip-formatter | |
parent | 903b8e69b0aba3192dcc9c99e7971f47b0f6be33 (diff) | |
download | gsoc2013-evolution-f2c34011833c291568023f2a52a65f540f59671f.tar.gz 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')
-rw-r--r-- | plugins/itip-formatter/itip-formatter.c | 20 |
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 |