mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-19 09:15:34 -04:00
fix signal processing for non-kqueue backends; when a signal callback delivers a signal; from Alexander Drozdov
svn:r1035
This commit is contained in:
parent
a077fb8c09
commit
fe72c885d9
2
signal.c
2
signal.c
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user