[evolution-data-server] CamelIMAPXServer not shut down properly on network outage
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] CamelIMAPXServer not shut down properly on network outage
- Date: Wed, 2 Apr 2014 17:15:31 +0000 (UTC)
commit 5c94365fe53fa1f3b9ee6f14f8ddc52d0f5aadbd
Author: Milan Crha <mcrha redhat com>
Date: Wed Apr 2 19:12:53 2014 +0200
CamelIMAPXServer not shut down properly on network outage
Even the CamelIMAPXStore had the server removed from its references,
the instance had been still alive in the background, when the network
changed and the destination host was unreachable.
camel/providers/imapx/camel-imapx-server.c | 12 ++++++------
1 files changed, 6 insertions(+), 6 deletions(-)
---
diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c
index a636dd0..918dc65 100644
--- a/camel/providers/imapx/camel-imapx-server.c
+++ b/camel/providers/imapx/camel-imapx-server.c
@@ -5041,18 +5041,17 @@ camel_imapx_server_shutdown (CamelIMAPXServer *is)
g_return_if_fail (CAMEL_IS_IMAPX_SERVER (is));
- g_main_loop_quit (is->priv->idle_main_loop);
- g_main_loop_quit (is->priv->parser_main_loop);
-
QUEUE_LOCK (is);
is->state = IMAPX_SHUTDOWN;
cancellable = g_weak_ref_get (&is->priv->parser_cancellable);
- g_weak_ref_set (&is->priv->parser_cancellable, NULL);
QUEUE_UNLOCK (is);
+ g_main_loop_quit (is->priv->idle_main_loop);
+ g_main_loop_quit (is->priv->parser_main_loop);
+
g_cancellable_cancel (cancellable);
g_clear_object (&cancellable);
}
@@ -7620,14 +7619,15 @@ imapx_ready_to_read (GInputStream *input_stream,
}
if (g_cancellable_is_cancelled (cancellable)) {
- gboolean active_queue_is_empty;
+ gboolean active_queue_is_empty, is_shutdown_request;
QUEUE_LOCK (is);
active_queue_is_empty =
camel_imapx_command_queue_is_empty (is->active);
+ is_shutdown_request = is->state == IMAPX_SHUTDOWN;
QUEUE_UNLOCK (is);
- if (active_queue_is_empty || imapx_in_idle (is)) {
+ if (!is_shutdown_request && (active_queue_is_empty || imapx_in_idle (is))) {
g_cancellable_reset (cancellable);
g_clear_error (&local_error);
} else {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]