[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