changeset 8682:49ad944c5741 HEAD

dict: Fixes to handling dying dict processes.
author Timo Sirainen <tss@iki.fi>
date Sun, 25 Jan 2009 18:39:07 -0500
parents 0c2ba85280d1
children a68ed51b681d
files src/master/dict-process.c
diffstat 1 files changed, 6 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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 child_process process;
 	struct dict_process *next;
+	pid_t pid;
 
 	struct dict_listener *listener;
 	struct log_io *log;
@@ -64,6 +65,7 @@
 
 	if (pid != 0) {
 		/* master */
+		process->pid = pid;
 		process->next = process->listener->processes;
 		process->listener->processes = process;
 
@@ -123,7 +125,7 @@
 {
 	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 @@
 	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