]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
master: Add master socket's io listener later.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 4 Jul 2016 12:05:00 +0000 (15:05 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 4 Jul 2016 12:09:45 +0000 (15:09 +0300)
Most importantly this fixes startup failure with kqueue:

Panic: kevent(EV_ADD, READ, 56) failed: Bad file descriptor

kqueue doesn't survive a fork(), so this change delays its creation until
after fork().

src/master/service-listen.c
src/master/service-monitor.c

index 1d3e399a7e7a5fcc1ed7b042592a6b1dfeee0f53..96b52e8ef0ee76f42c144064970671e57022aa7d 100644 (file)
@@ -6,7 +6,6 @@
 #include "fd-close-on-exec.h"
 #include "ioloop.h"
 #include "net.h"
-#include "master-client.h"
 #ifdef HAVE_SYSTEMD
 #include "sd-daemon.h"
 #endif
@@ -357,10 +356,6 @@ static int services_listen_master(struct service_list *service_list)
 
        if (service_list->master_fd == -1)
                return 0;
-
-       service_list->io_master =
-               io_add(service_list->master_fd, IO_READ,
-                      master_client_connected, service_list);
        return 1;
 }
 
index 44cdb2696b2f4bb905245f825c482d0b0a2b8f69..408edf4d2918566f67188ad9d14287b47e8aa300 100644 (file)
@@ -7,6 +7,7 @@
 #include "hash.h"
 #include "str.h"
 #include "safe-mkstemp.h"
+#include "master-client.h"
 #include "service.h"
 #include "service-process.h"
 #include "service-process-notify.h"
@@ -452,6 +453,12 @@ void services_monitor_start(struct service_list *service_list)
                return;
        service_anvil_monitor_start(service_list);
 
+       if (service_list->io_master == NULL) {
+               service_list->io_master =
+                       io_add(service_list->master_fd, IO_READ,
+                              master_client_connected, service_list);
+       }
+
        array_foreach(&service_list->services, services) {
                struct service *service = *services;