summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>2005-12-02 16:54:26 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>2005-12-02 16:54:26 +0000
commit5c6b3cad305f675016bb58c0e9695b8b34e4a897 (patch)
tree73937bb6b135ba7b68477a0fe6c59d3bb309a0d1 /lib
parent01f701c1b9bda9ac45d9b15f88eea9ffd76cbce4 (diff)
make write-end of signal socketpair non-blocking.
every signal received writes 1 byte to the socketpair. if you are outside the libevent main loop too long, the socketpair might fill up. that write would then block, in a signal handler. related to this, yesterdy we changed the signal handler to not trash errno. as for the read end, there will be multiple libevent reads off the socketpair (100 bytes at a time) until the socketpair is empty again ok provos
Diffstat (limited to 'lib')
-rw-r--r--lib/libevent/signal.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/libevent/signal.c b/lib/libevent/signal.c
index 7488b390279..fa623a40c5d 100644
--- a/lib/libevent/signal.c
+++ b/lib/libevent/signal.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: signal.c,v 1.9 2005/12/02 04:14:03 deraadt Exp $ */
+/* $OpenBSD: signal.c,v 1.10 2005/12/02 16:54:25 deraadt Exp $ */
/*
* Copyright 2000-2002 Niels Provos <provos@citi.umich.edu>
@@ -101,6 +101,8 @@ evsignal_init(sigset_t *evsigmask)
FD_CLOSEONEXEC(ev_signal_pair[0]);
FD_CLOSEONEXEC(ev_signal_pair[1]);
+ fcntl(ev_signal_pair[0], F_SETFL, O_NONBLOCK);
+
event_set(&ev_signal, ev_signal_pair[1], EV_READ,
evsignal_cb, &ev_signal);
ev_signal.ev_flags |= EVLIST_INTERNAL;