[dovecot-cvs] dovecot/src/login common.h,1.2,1.3 main.c,1.6,1.7 master.c,1.4,1.5

cras at procontrol.fi cras at procontrol.fi
Wed Nov 20 21:45:34 EET 2002


Update of /home/cvs/dovecot/src/login
In directory danu:/tmp/cvs-serv19587

Modified Files:
	common.h main.c master.c 
Log Message:
When connection to master is lost, close listening sockets.



Index: common.h
===================================================================
RCS file: /home/cvs/dovecot/src/login/common.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- common.h	16 Nov 2002 05:21:21 -0000	1.2
+++ common.h	20 Nov 2002 19:45:32 -0000	1.3
@@ -13,4 +13,6 @@
 void main_ref(void);
 void main_unref(void);
 
+void main_close_listen(void);
+
 #endif

Index: main.c
===================================================================
RCS file: /home/cvs/dovecot/src/login/main.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- main.c	16 Nov 2002 05:21:21 -0000	1.6
+++ main.c	20 Nov 2002 19:45:32 -0000	1.7
@@ -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);
 }

Index: master.c
===================================================================
RCS file: /home/cvs/dovecot/src/login/master.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- master.c	16 Nov 2002 05:21:21 -0000	1.4
+++ master.c	20 Nov 2002 19:45:32 -0000	1.5
@@ -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();
 }
 




More information about the dovecot-cvs mailing list