changeset 11645:f4238836c566 HEAD

imap, pop3: Forced disconnection of client didn't always close connection immediately.
author Timo Sirainen <tss@iki.fi>
date Mon, 28 Jun 2010 16:25:35 +0100
parents be2b7d2901a0
children b2aca3e50f44
files src/imap/imap-client.c src/pop3/pop3-client.c
diffstat 2 files changed, 18 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/imap/imap-client.c	Mon Jun 28 13:56:39 2010 +0000
+++ b/src/imap/imap-client.c	Mon Jun 28 16:25:35 2010 +0100
@@ -227,6 +227,11 @@
 	imap_refresh_proctitle();
 }
 
+static void client_destroy_timeout(struct client *client)
+{
+	client_destroy(client, NULL);
+}
+
 void client_disconnect(struct client *client, const char *reason)
 {
 	i_assert(reason != NULL);
@@ -240,6 +245,10 @@
 
 	i_stream_close(client->input);
 	o_stream_close(client->output);
+
+	if (client->to_idle != NULL)
+		timeout_remove(&client->to_idle);
+	client->to_idle = timeout_add(0, client_destroy_timeout, client);
 }
 
 void client_disconnect_with_error(struct client *client, const char *msg)
--- a/src/pop3/pop3-client.c	Mon Jun 28 13:56:39 2010 +0000
+++ b/src/pop3/pop3-client.c	Mon Jun 28 16:25:35 2010 +0100
@@ -435,6 +435,11 @@
 	pop3_refresh_proctitle();
 }
 
+static void client_destroy_timeout(struct client *client)
+{
+	client_destroy(client, NULL);
+}
+
 void client_disconnect(struct client *client, const char *reason)
 {
 	if (client->disconnected)
@@ -447,6 +452,10 @@
 
 	i_stream_close(client->input);
 	o_stream_close(client->output);
+
+	if (client->to_idle != NULL)
+		timeout_remove(&client->to_idle);
+	client->to_idle = timeout_add(0, client_destroy_timeout, client);
 }
 
 int client_send_line(struct client *client, const char *fmt, ...)