Attached patch should workaround this. The main problem with it is that
Dovecot doesn't die very easily after this. You have to kill all the
processes manually. I'll probably have to add yet another pipe just for
this.

But I wonder if this could be considered a kernel bug too? I think I'll
write a small test program and see what lkml thinks about it. Oh, and
seeing if other operating systems handle it better would be interesting
too.

BTW. I actually considered this already last week but then I thought it
can't be it since v1.2 did the same thing. But no, v1.2 doesn't really
do the same thing.

diff -r cde0d403c6ff src/lib-master/master-service.c
--- a/src/lib-master/master-service.c	Mon Dec 13 13:40:27 2010 +0000
+++ b/src/lib-master/master-service.c	Wed Dec 15 15:42:26 2010 +0000
@@ -375,8 +375,8 @@
 			master_service_set_service_count(service, count);
 
 		/* start listening errors for status fd, it means master died */
-		service->io_status_error = io_add(MASTER_STATUS_FD, IO_ERROR,
-						  master_status_error, service);
+		/*service->io_status_error = io_add(MASTER_STATUS_FD, IO_ERROR,
+						  master_status_error, service);*/
 	} else {
 		master_service_set_client_limit(service, 1);
 		master_service_set_service_count(service, 1);

Reply via email to