changeset 12393:57477db05aff

lib-auth: Less leaky fix to previous auth_master_*() bugfix.
author Timo Sirainen <tss@iki.fi>
date Fri, 05 Nov 2010 12:24:01 +0000
parents 55d144a33e62
children 7f8f73bed7f9
files src/lib-auth/auth-master.c
diffstat 1 files changed, 11 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-auth/auth-master.c	Fri Nov 05 12:15:53 2010 +0000
+++ b/src/lib-auth/auth-master.c	Fri Nov 05 12:24:01 2010 +0000
@@ -309,8 +309,10 @@
 static void auth_master_unset_io(struct auth_master_connection *conn,
 				 struct ioloop *prev_ioloop)
 {
-	io_loop_set_current(prev_ioloop);
-	lib_signals_reset_ioloop();
+	if (prev_ioloop != NULL) {
+		io_loop_set_current(prev_ioloop);
+		lib_signals_reset_ioloop();
+	}
 	io_loop_set_current(conn->ioloop);
 
 	timeout_remove(&conn->to);
@@ -320,8 +322,12 @@
 	io_loop_destroy(&conn->ioloop);
 
 	if ((conn->flags & AUTH_MASTER_FLAG_NO_IDLE_TIMEOUT) == 0) {
-		conn->to = timeout_add(1000*AUTH_MASTER_IDLE_SECS,
-				       auth_idle_timeout, conn);
+		if (prev_ioloop == NULL)
+			auth_connection_close(conn);
+		else {
+			conn->to = timeout_add(1000*AUTH_MASTER_IDLE_SECS,
+					       auth_idle_timeout, conn);
+		}
 	}
 }
 
@@ -370,8 +376,7 @@
 		io_loop_run(conn->ioloop);
 	}
 
-	if (prev_ioloop != NULL)
-		auth_master_unset_io(conn, prev_ioloop);
+	auth_master_unset_io(conn, prev_ioloop);
 	if (conn->aborted) {
 		conn->aborted = FALSE;
 		auth_connection_close(conn);