changeset 638:78b261175f2d HEAD

When connection to master is lost, close listening sockets.
author Timo Sirainen <tss@iki.fi>
date Wed, 20 Nov 2002 21:45:32 +0200
parents 6e5279a60f82
children 252bdd1392f0
files src/login/common.h src/login/main.c src/login/master.c
diffstat 3 files changed, 33 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/src/login/common.h	Wed Nov 20 21:33:24 2002 +0200
+++ b/src/login/common.h	Wed Nov 20 21:45:32 2002 +0200
@@ -13,4 +13,6 @@
 void main_ref(void);
 void main_unref(void);
 
+void main_close_listen(void);
+
 #endif
--- a/src/login/main.c	Wed Nov 20 21:33:24 2002 +0200
+++ b/src/login/main.c	Wed Nov 20 21:45:32 2002 +0200
@@ -38,6 +38,31 @@
 	}
 }
 
+void main_close_listen(void)
+{
+	if (closing_down)
+		return;
+
+	if (io_imap != NULL) {
+		if (close(LOGIN_IMAP_LISTEN_FD) < 0)
+			i_fatal("can't close() IMAP listen handle");
+
+		io_remove(io_imap);
+		io_imap = NULL;
+	}
+
+	if (io_imaps != NULL) {
+		if (close(LOGIN_IMAPS_LISTEN_FD) < 0)
+			i_fatal("can't close() IMAPS listen handle");
+
+		io_remove(io_imaps);
+		io_imaps = NULL;
+	}
+
+	closing_down = TRUE;
+	master_notify_finished();
+}
+
 static void sig_quit(int signo __attr_unused__)
 {
 	io_loop_stop(ioloop);
@@ -53,22 +78,8 @@
 	if (fd == -1)
 		return;
 
-	if (process_per_connection) {
-		if (close(listen_fd) < 0)
-			i_fatal("can't close() listen handle");
-
-		if (io_imap != NULL) {
-			io_remove(io_imap);
-			io_imap = NULL;
-		}
-		if (io_imaps != NULL) {
-			io_remove(io_imaps);
-			io_imaps = NULL;
-		}
-
-		closing_down = TRUE;
-		master_notify_finished();
-	}
+	if (process_per_connection)
+		main_close_listen();
 
 	(void)client_create(fd, &addr);
 }
--- a/src/login/master.c	Wed Nov 20 21:33:24 2002 +0200
+++ b/src/login/master.c	Wed Nov 20 21:45:32 2002 +0200
@@ -93,6 +93,9 @@
 {
 	MasterRequest req;
 
+	if (io_master == NULL)
+		return;
+
 	memset(&req, 0, sizeof(req));
 
 	/* sending -1 as fd does the notification */
@@ -109,6 +112,7 @@
 	io_remove(io_master);
 	io_master = NULL;
 
+        main_close_listen();
 	main_unref();
 }