changeset 20495:143b367cc784

master: Add master socket's io listener later. 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().
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Mon, 04 Jul 2016 15:05:00 +0300
parents d94cdfbc61e1
children bb728a4cbbde
files src/master/service-listen.c src/master/service-monitor.c
diffstat 2 files changed, 7 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/master/service-listen.c	Mon Jul 04 14:44:40 2016 +0300
+++ b/src/master/service-listen.c	Mon Jul 04 15:05:00 2016 +0300
@@ -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 @@
 
 	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;
 }
 
--- a/src/master/service-monitor.c	Mon Jul 04 14:44:40 2016 +0300
+++ b/src/master/service-monitor.c	Mon Jul 04 15:05:00 2016 +0300
@@ -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 @@
 		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;