dovecot-1.2: dict: Fixes to handling dying dict processes.

dovecot at dovecot.org dovecot at dovecot.org
Mon Jan 26 01:39:12 EET 2009


details:   http://hg.dovecot.org/dovecot-1.2/rev/49ad944c5741
changeset: 8682:49ad944c5741
user:      Timo Sirainen <tss at iki.fi>
date:      Sun Jan 25 18:39:07 2009 -0500
description:
dict: Fixes to handling dying dict processes.

diffstat:

1 file changed, 6 insertions(+), 2 deletions(-)
src/master/dict-process.c |    8 ++++++--

diffs (40 lines):

diff -r 0c2ba85280d1 -r 49ad944c5741 src/master/dict-process.c
--- a/src/master/dict-process.c	Sun Jan 25 18:23:52 2009 -0500
+++ b/src/master/dict-process.c	Sun Jan 25 18:39:07 2009 -0500
@@ -27,6 +27,7 @@ struct dict_process {
 struct dict_process {
 	struct child_process process;
 	struct dict_process *next;
+	pid_t pid;
 
 	struct dict_listener *listener;
 	struct log_io *log;
@@ -64,6 +65,7 @@ static int dict_process_create(struct di
 
 	if (pid != 0) {
 		/* master */
+		process->pid = pid;
 		process->next = process->listener->processes;
 		process->listener->processes = process;
 
@@ -123,7 +125,7 @@ static void dict_process_deinit(struct d
 {
 	struct dict_process **p;
 
-	for (p = &process->listener->processes; *p != NULL; p++) {
+	for (p = &process->listener->processes; *p != NULL; p = &(*p)->next) {
 		if (*p == process) {
 			*p = process->next;
 			break;
@@ -186,8 +188,10 @@ static void dict_listener_deinit(struct 
 	if (close(listener->fd) < 0)
 		i_error("close(dict listener) failed: %m");
 
-	while (listener->processes != NULL)
+	while (listener->processes != NULL) {
+		child_process_remove(listener->processes->pid);
 		dict_process_deinit(listener->processes);
+	}
 }
 
 static void


More information about the dovecot-cvs mailing list