diff options
author | Andrew Tridgell <tridge@samba.org> | 2007-01-21 08:23:14 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:43:54 -0500 |
commit | 336ae458e9f648625f8fe438bf1dc4c8f7e616a7 (patch) | |
tree | dd7ead16ed385381a13046a85f2ff2a431465480 /source4/lib/events/events_epoll.c | |
parent | 7fba2dbf9a7b387fb5a975b528d880da55da1560 (diff) | |
download | samba-336ae458e9f648625f8fe438bf1dc4c8f7e616a7.tar.gz samba-336ae458e9f648625f8fe438bf1dc4c8f7e616a7.tar.bz2 samba-336ae458e9f648625f8fe438bf1dc4c8f7e616a7.zip |
r20928: added signal events to lib/events
Jeremy asked for this to allow Samba3 to use the Samba4 events library
see torture/local/event.c for an example
(This used to be commit 7e105482ff9a3da6b4708ff99a64f1881614fc5f)
Diffstat (limited to 'source4/lib/events/events_epoll.c')
-rw-r--r-- | source4/lib/events/events_epoll.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/source4/lib/events/events_epoll.c b/source4/lib/events/events_epoll.c index f69b5bc6f4..efcbb97f0b 100644 --- a/source4/lib/events/events_epoll.c +++ b/source4/lib/events/events_epoll.c @@ -214,8 +214,19 @@ static int epoll_event_loop(struct epoll_event_context *epoll_ev, struct timeval timeout = ((tvalp->tv_usec+999) / 1000) + (tvalp->tv_sec*1000); } + if (epoll_ev->ev->num_signal_handlers && + common_event_check_signal(epoll_ev->ev)) { + return 0; + } + ret = epoll_wait(epoll_ev->epoll_fd, events, MAXEVENTS, timeout); + if (ret == -1 && errno == EINTR && epoll_ev->ev->num_signal_handlers) { + if (common_event_check_signal(epoll_ev->ev)) { + return 0; + } + } + if (ret == -1 && errno != EINTR) { epoll_fallback_to_select(epoll_ev, "epoll_wait() failed"); return -1; @@ -397,6 +408,7 @@ static const struct event_ops epoll_event_ops = { .get_fd_flags = epoll_event_get_fd_flags, .set_fd_flags = epoll_event_set_fd_flags, .add_timed = common_event_add_timed, + .add_signal = common_event_add_signal, .loop_once = epoll_event_loop_once, .loop_wait = epoll_event_loop_wait, }; |