diff options
author | Ivan Zhakov <ivan@apache.org> | 2022-02-15 13:05:37 +0000 |
---|---|---|
committer | Ivan Zhakov <ivan@apache.org> | 2022-02-15 13:05:37 +0000 |
commit | ee6ba053c3b032b1ac7c4c515af6a32b0090c04b (patch) | |
tree | 0c918c8508555eb177419aea175c19bb78df6086 /poll/unix/poll.c | |
parent | 388b2eab44cd1afe6f7af226cc894a15af4ff398 (diff) | |
download | apr-ee6ba053c3b032b1ac7c4c515af6a32b0090c04b.tar.gz |
On '1.8.x-r1897895' branch: Backport r1897895 from trunk.1.8.x-r1897895
git-svn-id: https://svn.apache.org/repos/asf/apr/apr/branches/1.8.x-r1897895@1898104 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'poll/unix/poll.c')
-rw-r--r-- | poll/unix/poll.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/poll/unix/poll.c b/poll/unix/poll.c index 9b6a539e0..fdfece536 100644 --- a/poll/unix/poll.c +++ b/poll/unix/poll.c @@ -191,11 +191,7 @@ static apr_status_t impl_pollset_add(apr_pollset_t *pollset, #if APR_FILES_AS_SOCKETS pollset->p->pollset[pollset->nelts].fd = descriptor->desc.f->filedes; #else - if ((pollset->flags & APR_POLLSET_WAKEABLE) && - descriptor->desc.f == pollset->wakeup_pipe[0]) - pollset->p->pollset[pollset->nelts].fd = (SOCKET)descriptor->desc.f->filedes; - else - return APR_EBADF; + return APR_EBADF; #endif } pollset->p->pollset[pollset->nelts].events = @@ -276,12 +272,21 @@ static apr_status_t impl_pollset_poll(apr_pollset_t *pollset, /* Check if the polled descriptor is our * wakeup pipe. In that case do not put it result set. */ +#if WAKEUP_USES_PIPE if ((pollset->flags & APR_POLLSET_WAKEABLE) && pollset->p->query_set[i].desc_type == APR_POLL_FILE && pollset->p->query_set[i].desc.f == pollset->wakeup_pipe[0]) { apr_poll_drain_wakeup_pipe(&pollset->wakeup_set, pollset->wakeup_pipe); rv = APR_EINTR; } +#else + if ((pollset->flags & APR_POLLSET_WAKEABLE) && + pollset->p->query_set[i].desc_type == APR_POLL_SOCKET && + pollset->p->query_set[i].desc.s == pollset->wakeup_socket[0]) { + apr_poll_drain_wakeup_socket(&pollset->wakeup_set, pollset->wakeup_socket); + rv = APR_EINTR; + } +#endif else { pollset->p->result_set[j] = pollset->p->query_set[i]; pollset->p->result_set[j].rtnevents = @@ -428,13 +433,21 @@ static apr_status_t impl_pollcb_poll(apr_pollcb_t *pollcb, if (pollcb->pollset.ps[i].revents != 0) { apr_pollfd_t *pollfd = pollcb->copyset[i]; +#if WAKEUP_USES_PIPE if ((pollcb->flags & APR_POLLSET_WAKEABLE) && pollfd->desc_type == APR_POLL_FILE && pollfd->desc.f == pollcb->wakeup_pipe[0]) { apr_poll_drain_wakeup_pipe(&pollcb->wakeup_set, pollcb->wakeup_pipe); return APR_EINTR; } - +#else + if ((pollcb->flags & APR_POLLSET_WAKEABLE) && + pollfd->desc_type == APR_POLL_SOCKET && + pollfd->desc.s == pollcb->wakeup_socket[0]) { + apr_poll_drain_wakeup_socket(&pollcb->wakeup_set, pollcb->wakeup_socket); + return APR_EINTR; + } +#endif pollfd->rtnevents = get_revent(pollcb->pollset.ps[i].revents); rv = func(baton, pollfd); if (rv) { |