]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
master: Add IO listeners to anvil after forking. Fixes kqueue.
authorTimo Sirainen <tss@iki.fi>
Thu, 15 Oct 2009 19:17:12 +0000 (15:17 -0400)
committerTimo Sirainen <tss@iki.fi>
Thu, 15 Oct 2009 19:17:12 +0000 (15:17 -0400)
--HG--
branch : HEAD

src/master/service-anvil.c
src/master/service-anvil.h
src/master/service-monitor.c

index aef2075ec6952c048d3127fd4b0f5c59c6cd04f9..b8bc648f7c40626ed42a78e4413070f7c489f35d 100644 (file)
@@ -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);
index 05c6473eba4eb39558ba9e7b684a431f716da833..7c467abe4c61990bd95182cfd71fb71b246286ec 100644 (file)
@@ -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);
index 2f4d7f48c28f0ed011231dcdc01e74b949572c62..6fd1eeedbda058372db102cc6ca073847766e219 100644 (file)
@@ -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);