Mercurial > dovecot > original-hg > dovecot-1.2
changeset 4670:5372b92be174 HEAD
Reference counter fixes
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 14 Oct 2006 02:50:09 +0300 |
parents | d84a7bd63862 |
children | 830cee5ef3c0 |
files | src/master/login-process.c src/master/login-process.h src/master/main.c |
diffstat | 3 files changed, 8 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/master/login-process.c Sat Oct 14 02:11:04 2006 +0300 +++ b/src/master/login-process.c Sat Oct 14 02:50:09 2006 +0300 @@ -439,7 +439,7 @@ p = i_new(struct login_process, 1); p->group = group; - p->refcount = 1; + p->refcount = 2; /* once for fd close, another for process exit */ p->pid = pid; p->fd = fd; p->io = io_add(fd, IO_READ, login_process_input, p); @@ -487,10 +487,12 @@ if (p->inetd_child) login_process_exited(p); + login_process_unref(p); } static void login_process_unref(struct login_process *p) { + i_assert(p->refcount > 0); if (--p->refcount > 0) return; @@ -689,20 +691,17 @@ p->group->wanted_processes_count = 0; } - login_process_destroy(p); login_process_exited(p); } -void login_processes_destroy_all(bool unref) +void login_processes_destroy_all(void) { struct hash_iterate_context *iter; void *key, *value; iter = hash_iterate_init(processes); - while (hash_iterate(iter, &key, &value)) { + while (hash_iterate(iter, &key, &value)) login_process_destroy(value); - if (unref) login_process_unref(value); - } hash_iterate_deinit(iter); while (login_groups != NULL) { @@ -893,7 +892,7 @@ void login_processes_deinit(void) { - login_processes_destroy_all(TRUE); + login_processes_destroy_all(); hash_destroy(processes); if (to != NULL)
--- a/src/master/login-process.h Sat Oct 14 02:11:04 2006 +0300 +++ b/src/master/login-process.h Sat Oct 14 02:50:09 2006 +0300 @@ -20,7 +20,7 @@ void login_process_destroyed(pid_t pid, bool abnormal_exit); -void login_processes_destroy_all(bool unref); +void login_processes_destroy_all(void); void login_processes_init(void); void login_processes_deinit(void);
--- a/src/master/main.c Sat Oct 14 02:11:04 2006 +0300 +++ b/src/master/main.c Sat Oct 14 02:50:09 2006 +0300 @@ -135,7 +135,7 @@ i_warning("SIGHUP received - reloading configuration"); /* restart auth and login processes */ - login_processes_destroy_all(FALSE); + login_processes_destroy_all(); auth_processes_destroy_all(); dict_process_kill();