From: Timo Sirainen Date: Thu, 15 Oct 2009 19:17:12 +0000 (-0400) Subject: master: Add IO listeners to anvil after forking. Fixes kqueue. X-Git-Tag: 2.0.alpha2~94 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fb08a91e3f2949ecefb647fa38206ca9aad5307f;p=thirdparty%2Fdovecot%2Fcore.git master: Add IO listeners to anvil after forking. Fixes kqueue. --HG-- branch : HEAD --- diff --git a/src/master/service-anvil.c b/src/master/service-anvil.c index aef2075ec6..b8bc648f7c 100644 --- a/src/master/service-anvil.c +++ b/src/master/service-anvil.c @@ -113,10 +113,16 @@ int service_list_init_anvil(struct service_list *service_list, service_list->anvil_kills = service_process_notify_init(service_list->nonblocking_anvil_fd[1], service_process_write_anvil_kill); - service_list_anvil_discard_input(service_list); return 0; } +void services_anvil_init(struct service_list *service_list) +{ + /* this can't be in _init_anvil() because we can't do io_add()s + before forking with kqueue. */ + service_list_anvil_discard_input(service_list); +} + void service_list_deinit_anvil(struct service_list *service_list) { service_list_anvil_discard_input_stop(service_list); diff --git a/src/master/service-anvil.h b/src/master/service-anvil.h index 05c6473eba..7c467abe4c 100644 --- a/src/master/service-anvil.h +++ b/src/master/service-anvil.h @@ -4,6 +4,7 @@ int service_list_init_anvil(struct service_list *service_list, const char **error_r); void service_list_deinit_anvil(struct service_list *service_list); +void services_anvil_init(struct service_list *service_list); void service_anvil_process_created(struct service *service); void service_anvil_process_destroyed(struct service *service); diff --git a/src/master/service-monitor.c b/src/master/service-monitor.c index 2f4d7f48c2..6fd1eeedbd 100644 --- a/src/master/service-monitor.c +++ b/src/master/service-monitor.c @@ -9,6 +9,7 @@ #include "service-auth-source.h" #include "service-process.h" #include "service-process-notify.h" +#include "service-anvil.h" #include "service-log.h" #include "service-monitor.h" @@ -267,6 +268,7 @@ void services_monitor_start(struct service_list *service_list) struct service *const *services; unsigned int i, count; + services_anvil_init(service_list); services_log_init(service_list); services = array_get(&service_list->services, &count);