diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 2005-12-02 16:54:26 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 2005-12-02 16:54:26 +0000 |
commit | 5c6b3cad305f675016bb58c0e9695b8b34e4a897 (patch) | |
tree | 73937bb6b135ba7b68477a0fe6c59d3bb309a0d1 /lib/libevent/signal.c | |
parent | 01f701c1b9bda9ac45d9b15f88eea9ffd76cbce4 (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/libevent/signal.c')
-rw-r--r-- | lib/libevent/signal.c | 4 |
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; |