From 5c6b3cad305f675016bb58c0e9695b8b34e4a897 Mon Sep 17 00:00:00 2001 From: Theo de Raadt Date: Fri, 2 Dec 2005 16:54:26 +0000 Subject: 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 --- lib/libevent/signal.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 @@ -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; -- cgit v1.2.3