aboutsummaryrefslogtreecommitdiffstats
path: root/svcsupervise.c
diff options
context:
space:
mode:
authorMarius Halden <marius.h@lden.org>2015-12-10 20:24:06 +0100
committerMarius Halden <marius.h@lden.org>2015-12-10 20:24:06 +0100
commit8f09febcdca1968e0f0eaddc67aac80aaf8e24db (patch)
treea1ad2010f54d0489749508f73306f1f8b5cba032 /svcsupervise.c
parentc1957fa56dedc6acb67f53e882bd81bbea4129b5 (diff)
downloadsvcmon-8f09febcdca1968e0f0eaddc67aac80aaf8e24db.tar.gz
svcmon-8f09febcdca1968e0f0eaddc67aac80aaf8e24db.tar.bz2
svcmon-8f09febcdca1968e0f0eaddc67aac80aaf8e24db.tar.xz
Add workaround for broken kqueue
Diffstat (limited to 'svcsupervise.c')
-rw-r--r--svcsupervise.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/svcsupervise.c b/svcsupervise.c
index e3b36fd..bffcb23 100644
--- a/svcsupervise.c
+++ b/svcsupervise.c
@@ -328,6 +328,18 @@ main(int argc, char **argv)
if ((ok_fd = open("supervise/ok", O_RDONLY | O_NONBLOCK | O_CLOEXEC)) == -1)
err(1, "open()");
+#ifdef BROKEN_KQUEUE /* :( */
+ {
+ int ctrl_fd_w, ok_fd_w;
+
+ if ((ctrl_fd_w = open("supervise/control", O_WRONLY | O_NONBLOCK | O_CLOEXEC)) == -1)
+ err(1, "open()");
+
+ if ((ok_fd_w = open("supervise/ok", O_WRONLY | O_NONBLOCK | O_CLOEXEC)) == -1)
+ err(1, "open()");
+ }
+#endif
+
if (stat("./down", &sb) == -1) {
if (errno == ENOENT) {
wantup = 1;
@@ -337,13 +349,13 @@ main(int argc, char **argv)
wantup = 0;
}
- EV_SET(&evt[0], SIGHUP, EVFILT_SIGNAL, EV_ADD | EV_ENABLE, 0, 0, 0);
- EV_SET(&evt[1], SIGINT, EVFILT_SIGNAL, EV_ADD | EV_ENABLE, 0, 0, 0);
- EV_SET(&evt[2], SIGTERM, EVFILT_SIGNAL, EV_ADD | EV_ENABLE, 0, 0, 0);
- EV_SET(&evt[3], SIGCHLD, EVFILT_SIGNAL, EV_ADD | EV_ENABLE, 0, 0, 0);
- EV_SET(&evt[4], ctrl_fd, EVFILT_READ, EV_ADD | EV_ENABLE, 0, 0, 0);
- EV_SET(&evt[5], ok_fd, EVFILT_READ, EV_ADD | EV_ENABLE, 0, 0, 0);
- EV_SET(&evt[6], 1, EVFILT_TIMER, EV_ADD | EV_ENABLE | EV_ONESHOT, NOTE_SECONDS, 5, 0);
+ EV_SET(&evt[0], SIGHUP, EVFILT_SIGNAL, EV_ADD, 0, 0, 0);
+ EV_SET(&evt[1], SIGINT, EVFILT_SIGNAL, EV_ADD, 0, 0, 0);
+ EV_SET(&evt[2], SIGTERM, EVFILT_SIGNAL, EV_ADD, 0, 0, 0);
+ EV_SET(&evt[3], SIGCHLD, EVFILT_SIGNAL, EV_ADD, 0, 0, 0);
+ EV_SET(&evt[4], ctrl_fd, EVFILT_READ, EV_ADD | EV_CLEAR, 0, 0, 0);
+ EV_SET(&evt[5], ok_fd, EVFILT_READ, EV_ADD | EV_CLEAR, 0, 0, 0);
+ EV_SET(&evt[6], 1, EVFILT_TIMER, EV_ADD | EV_ONESHOT, NOTE_SECONDS, 5, 0);
if (kevent(kq, evt, 6, NULL, 0, NULL) == -1)
err(1, "kevent()");