Mercurial > dovecot > original-hg > dovecot-1.2
changeset 4651:2fe8f6a0bc5b HEAD
If login process dies before initialization, stall creation of them instead
of completely shutting down.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 12 Oct 2006 12:13:36 +0300 |
parents | 4ff5080c5325 |
children | 3da6580bb0ed |
files | src/master/login-process.c |
diffstat | 1 files changed, 18 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/src/master/login-process.c Wed Oct 11 15:22:31 2006 +0300 +++ b/src/master/login-process.c Thu Oct 12 12:13:36 2006 +0300 @@ -54,6 +54,7 @@ static struct hash_table *processes; static struct login_group *login_groups; +static void login_processes_stall(void); static void login_process_destroy(struct login_process *p); static void login_process_unref(struct login_process *p); static bool login_process_init_group(struct login_process *p); @@ -176,6 +177,20 @@ process_remove_from_prelogin_lists(p); } +static void login_process_set_initialized(struct login_process *p) +{ + p->initialized = TRUE; + + if (logins_stalled) { + /* processes were created successfully */ + i_info("Created login processes successfully, unstalling"); + + logins_stalled = FALSE; + timeout_remove(&to); + to = timeout_add(1000, login_processes_start_missing, NULL); + } +} + static void login_process_set_state(struct login_process *p, enum master_login_state state) { @@ -377,7 +392,7 @@ if (!p->initialized) { /* initialization notify */ - p->initialized = TRUE;; + login_process_set_initialized(p); } else { /* change "listening for new connections" status */ login_process_set_state(p, state); @@ -453,10 +468,8 @@ return; p->destroyed = TRUE; - if (!p->initialized && io_loop_is_running(ioloop)) { - i_error("Login process died too early - shutting down"); - io_loop_stop(ioloop); - } + if (!p->initialized) + login_processes_stall(); o_stream_close(p->output); io_remove(&p->io); @@ -768,7 +781,6 @@ to = timeout_add(60*1000, login_processes_start_missing, NULL); } - static void login_processes_start_missing(void *context __attr_unused__) { @@ -783,15 +795,6 @@ return; } } - - if (logins_stalled) { - /* processes were created successfully */ - i_info("Created login processes successfully, unstalling"); - - logins_stalled = FALSE; - timeout_remove(&to); - to = timeout_add(1000, login_processes_start_missing, NULL); - } } static int login_process_send_env(struct login_process *p)