# HG changeset patch # User Timo Sirainen # Date 1160783409 -10800 # Node ID 5372b92be174d2e687ea5bf1eb40b83f86afebfd # Parent d84a7bd638620f3151fc18b6dca9b1574f31fa6e Reference counter fixes diff -r d84a7bd63862 -r 5372b92be174 src/master/login-process.c --- 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) diff -r d84a7bd63862 -r 5372b92be174 src/master/login-process.h --- 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); diff -r d84a7bd63862 -r 5372b92be174 src/master/main.c --- 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();