fix signal processing for non-kqueue backends; when a signal callback delivers a signal; from Alexander Drozdov

svn:r1035
This commit is contained in:
Niels Provos 2009-01-22 06:23:14 +00:00
parent a077fb8c09
commit fe72c885d9
2 changed files with 48 additions and 1 deletions

View File

@ -86,7 +86,7 @@ static void evsig_handler(int sig);
static void
evsig_cb(evutil_socket_t fd, short what, void *arg)
{
static char signals[100];
static char signals[1];
#ifdef WIN32
SSIZE_T n;
#else

View File

@ -863,6 +863,52 @@ out:
cleanup_test();
return;
}
void
signal_cb_swp(int sig, short event, void *arg)
{
called++;
if (called < 5)
raise(sig);
else
event_loopexit(NULL);
}
void
timeout_cb_swp(int fd, short event, void *arg)
{
if (called == -1) {
struct timeval tv = {5, 0};
called = 0;
evtimer_add((struct event *)arg, &tv);
raise(SIGUSR1);
return;
}
test_ok = 0;
event_loopexit(NULL);
}
static void
test_signal_while_processing(void)
{
struct event_base *base = event_init();
struct event ev, ev_timer;
struct timeval tv = {0, 0};
setup_test("Receiving a signal while processing other signal: ");
called = -1;
test_ok = 1;
signal_set(&ev, SIGUSR1, signal_cb_swp, NULL);
signal_add(&ev, NULL);
evtimer_set(&ev_timer, timeout_cb_swp, &ev_timer);
evtimer_add(&ev_timer, &tv);
event_dispatch();
event_base_free(base);
cleanup_test();
return;
}
#endif
static void
@ -2413,6 +2459,7 @@ main (int argc, char **argv)
test_signal_switchbase();
test_signal_restore();
test_signal_assert();
test_signal_while_processing();
#endif
return (0);