forked from Lainports/opnsense-ports
64 lines
1.9 KiB
Text
64 lines
1.9 KiB
Text
From ffd8dc932516bc55bf01d91355540daab365e5e9 Mon Sep 17 00:00:00 2001
|
|
From: Timo Sirainen <timo.sirainen@dovecot.fi>
|
|
Date: Mon, 4 Jul 2016 15:05:00 +0300
|
|
Subject: [PATCH] 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().
|
|
---
|
|
src/master/service-listen.c | 5 -----
|
|
src/master/service-monitor.c | 7 +++++++
|
|
2 files changed, 7 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/src/master/service-listen.c b/src/master/service-listen.c
|
|
index 1d3e399..96b52e8 100644
|
|
--- src/master/service-listen.c
|
|
+++ src/master/service-listen.c
|
|
@@ -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;
|
|
}
|
|
|
|
diff --git a/src/master/service-monitor.c b/src/master/service-monitor.c
|
|
index 44cdb26..408edf4 100644
|
|
--- src/master/service-monitor.c
|
|
+++ src/master/service-monitor.c
|
|
@@ -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;
|
|
|