Mercurial > dovecot > original-hg > dovecot-1.2
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(); }