summaryrefslogtreecommitdiff
path: root/poll
diff options
context:
space:
mode:
authorylavic <ylavic@13f79535-47bb-0310-9956-ffa450edef68>2022-01-26 21:17:36 +0000
committerylavic <ylavic@13f79535-47bb-0310-9956-ffa450edef68>2022-01-26 21:17:36 +0000
commitdeb1f4429e3215f9ff680baa61ccc7c34f9f0f93 (patch)
tree33c018b578c888228c8b6ed79741c439a25370ed /poll
parent54159aac3c34c34546df9462f30d86e27a049cae (diff)
downloadlibapr-deb1f4429e3215f9ff680baa61ccc7c34f9f0f93.tar.gz
Revert r1897518 (spurious changes).
git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1897519 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'poll')
-rw-r--r--poll/unix/epoll.c2
-rw-r--r--poll/unix/kqueue.c127
-rw-r--r--poll/unix/port.c273
3 files changed, 168 insertions, 234 deletions
diff --git a/poll/unix/epoll.c b/poll/unix/epoll.c
index 89c41a404..c00a1094d 100644
--- a/poll/unix/epoll.c
+++ b/poll/unix/epoll.c
@@ -123,7 +123,7 @@ static apr_status_t impl_pollset_create(apr_pollset_t *pollset,
}
#endif
- pollset->p = apr_pcalloc(p, sizeof(apr_pollset_private_t));
+ pollset->p = apr_palloc(p, sizeof(apr_pollset_private_t));
#if APR_HAS_THREADS
if ((flags & APR_POLLSET_THREADSAFE) &&
!(flags & APR_POLLSET_NOCOPY) &&
diff --git a/poll/unix/kqueue.c b/poll/unix/kqueue.c
index aa4251f1b..e8a1ef95b 100644
--- a/poll/unix/kqueue.c
+++ b/poll/unix/kqueue.c
@@ -75,12 +75,9 @@ static apr_status_t impl_pollset_create(apr_pollset_t *pollset,
apr_uint32_t flags)
{
apr_status_t rv;
-
- pollset->p = apr_pcalloc(p, sizeof(apr_pollset_private_t));
-
+ pollset->p = apr_palloc(p, sizeof(apr_pollset_private_t));
#if APR_HAS_THREADS
if (flags & APR_POLLSET_THREADSAFE &&
- !(flags & APR_POLLSET_NOCOPY) &&
((rv = apr_thread_mutex_create(&pollset->p->ring_lock,
APR_THREAD_MUTEX_DEFAULT,
p)) != APR_SUCCESS)) {
@@ -102,9 +99,14 @@ static apr_status_t impl_pollset_create(apr_pollset_t *pollset,
* for the same descriptor)
*/
pollset->p->setsize = 2 * size;
- pollset->p->ke_set = apr_pcalloc(p, pollset->p->setsize * sizeof(struct kevent));
+
+ pollset->p->ke_set =
+ (struct kevent *) apr_palloc(p, pollset->p->setsize * sizeof(struct kevent));
+
+ memset(pollset->p->ke_set, 0, pollset->p->setsize * sizeof(struct kevent));
pollset->p->kqueue_fd = kqueue();
+
if (pollset->p->kqueue_fd == -1) {
pollset->p = NULL;
return apr_get_netos_error();
@@ -131,11 +133,9 @@ static apr_status_t impl_pollset_create(apr_pollset_t *pollset,
pollset->p->result_set = apr_palloc(p, pollset->p->setsize * sizeof(apr_pollfd_t));
- if (!(flags & APR_POLLSET_NOCOPY)) {
- APR_RING_INIT(&pollset->p->query_ring, pfd_elem_t, link);
- APR_RING_INIT(&pollset->p->free_ring, pfd_elem_t, link);
- APR_RING_INIT(&pollset->p->dead_ring, pfd_elem_t, link);
- }
+ APR_RING_INIT(&pollset->p->query_ring, pfd_elem_t, link);
+ APR_RING_INIT(&pollset->p->free_ring, pfd_elem_t, link);
+ APR_RING_INIT(&pollset->p->dead_ring, pfd_elem_t, link);
return APR_SUCCESS;
}
@@ -144,22 +144,20 @@ static apr_status_t impl_pollset_add(apr_pollset_t *pollset,
const apr_pollfd_t *descriptor)
{
apr_os_sock_t fd;
- pfd_elem_t *elem = NULL;
+ pfd_elem_t *elem;
apr_status_t rv = APR_SUCCESS;
- if (!(pollset->flags & APR_POLLSET_NOCOPY)) {
- pollset_lock_rings();
+ pollset_lock_rings();
- if (!APR_RING_EMPTY(&(pollset->p->free_ring), pfd_elem_t, link)) {
- elem = APR_RING_FIRST(&(pollset->p->free_ring));
- APR_RING_REMOVE(elem, link);
- }
- else {
- elem = (pfd_elem_t *) apr_palloc(pollset->pool, sizeof(pfd_elem_t));
- APR_RING_ELEM_INIT(elem, link);
- }
- elem->pfd = *descriptor;
+ if (!APR_RING_EMPTY(&(pollset->p->free_ring), pfd_elem_t, link)) {
+ elem = APR_RING_FIRST(&(pollset->p->free_ring));
+ APR_RING_REMOVE(elem, link);
}
+ else {
+ elem = (pfd_elem_t *) apr_palloc(pollset->pool, sizeof(pfd_elem_t));
+ APR_RING_ELEM_INIT(elem, link);
+ }
+ elem->pfd = *descriptor;
if (descriptor->desc_type == APR_POLL_SOCKET) {
fd = descriptor->desc.s->socketdes;
@@ -169,14 +167,7 @@ static apr_status_t impl_pollset_add(apr_pollset_t *pollset,
}
if (descriptor->reqevents & APR_POLLIN) {
- if (pollset->flags & APR_POLLSET_NOCOPY) {
- EV_SET(&pollset->p->kevent, fd, EVFILT_READ, EV_ADD, 0, 0,
- descriptor);
- }
- else {
- EV_SET(&pollset->p->kevent, fd, EVFILT_READ, EV_ADD, 0, 0,
- elem);
- }
+ EV_SET(&pollset->p->kevent, fd, EVFILT_READ, EV_ADD, 0, 0, elem);
if (kevent(pollset->p->kqueue_fd, &pollset->p->kevent, 1, NULL, 0,
NULL) == -1) {
@@ -185,14 +176,7 @@ static apr_status_t impl_pollset_add(apr_pollset_t *pollset,
}
if (descriptor->reqevents & APR_POLLOUT && rv == APR_SUCCESS) {
- if (pollset->flags & APR_POLLSET_NOCOPY) {
- EV_SET(&pollset->p->kevent, fd, EVFILT_WRITE, EV_ADD, 0, 0,
- descriptor);
- }
- else {
- EV_SET(&pollset->p->kevent, fd, EVFILT_WRITE, EV_ADD, 0, 0,
- elem);
- }
+ EV_SET(&pollset->p->kevent, fd, EVFILT_WRITE, EV_ADD, 0, 0, elem);
if (kevent(pollset->p->kqueue_fd, &pollset->p->kevent, 1, NULL, 0,
NULL) == -1) {
@@ -200,26 +184,27 @@ static apr_status_t impl_pollset_add(apr_pollset_t *pollset,
}
}
- if (!(pollset->flags & APR_POLLSET_NOCOPY)) {
- if (rv == APR_SUCCESS) {
- APR_RING_INSERT_TAIL(&(pollset->p->query_ring), elem, pfd_elem_t, link);
- }
- else {
- APR_RING_INSERT_TAIL(&(pollset->p->free_ring), elem, pfd_elem_t, link);
- }
-
- pollset_unlock_rings();
+ if (rv == APR_SUCCESS) {
+ APR_RING_INSERT_TAIL(&(pollset->p->query_ring), elem, pfd_elem_t, link);
+ }
+ else {
+ APR_RING_INSERT_TAIL(&(pollset->p->free_ring), elem, pfd_elem_t, link);
}
+ pollset_unlock_rings();
+
return rv;
}
static apr_status_t impl_pollset_remove(apr_pollset_t *pollset,
const apr_pollfd_t *descriptor)
{
+ pfd_elem_t *ep;
apr_status_t rv;
apr_os_sock_t fd;
+ pollset_lock_rings();
+
if (descriptor->desc_type == APR_POLL_SOCKET) {
fd = descriptor->desc.s->socketdes;
}
@@ -246,27 +231,21 @@ static apr_status_t impl_pollset_remove(apr_pollset_t *pollset,
}
}
- if (!(pollset->flags & APR_POLLSET_NOCOPY)) {
- pfd_elem_t *ep;
-
- pollset_lock_rings();
+ for (ep = APR_RING_FIRST(&(pollset->p->query_ring));
+ ep != APR_RING_SENTINEL(&(pollset->p->query_ring),
+ pfd_elem_t, link);
+ ep = APR_RING_NEXT(ep, link)) {
- for (ep = APR_RING_FIRST(&(pollset->p->query_ring));
- ep != APR_RING_SENTINEL(&(pollset->p->query_ring),
- pfd_elem_t, link);
- ep = APR_RING_NEXT(ep, link)) {
-
- if (descriptor->desc.s == ep->pfd.desc.s) {
- APR_RING_REMOVE(ep, link);
- APR_RING_INSERT_TAIL(&(pollset->p->dead_ring),
- ep, pfd_elem_t, link);
- break;
- }
+ if (descriptor->desc.s == ep->pfd.desc.s) {
+ APR_RING_REMOVE(ep, link);
+ APR_RING_INSERT_TAIL(&(pollset->p->dead_ring),
+ ep, pfd_elem_t, link);
+ break;
}
-
- pollset_unlock_rings();
}
+ pollset_unlock_rings();
+
return rv;
}
@@ -303,13 +282,7 @@ static apr_status_t impl_pollset_poll(apr_pollset_t *pollset,
const apr_pollfd_t *fd;
for (i = 0, j = 0; i < ret; i++) {
- if (pollset->flags & APR_POLLSET_NOCOPY) {
- fd = (apr_pollfd_t *)pollset->p->ke_set[i].udata;
- }
- else {
- fd = &((pfd_elem_t *)pollset->p->ke_set[i].udata)->pfd;
- }
-
+ fd = &((pfd_elem_t *)pollset->p->ke_set[i].udata)->pfd;
if ((pollset->flags & APR_POLLSET_WAKEABLE) &&
fd->desc_type == APR_POLL_FILE &&
fd->desc.f == pollset->wakeup_pipe[0]) {
@@ -332,15 +305,13 @@ static apr_status_t impl_pollset_poll(apr_pollset_t *pollset,
}
}
- if (!(pollset->flags & APR_POLLSET_NOCOPY)) {
- pollset_lock_rings();
+ pollset_lock_rings();
- /* Shift all PFDs in the Dead Ring to the Free Ring */
- APR_RING_CONCAT(&(pollset->p->free_ring), &(pollset->p->dead_ring),
- pfd_elem_t, link);
+ /* Shift all PFDs in the Dead Ring to the Free Ring */
+ APR_RING_CONCAT(&(pollset->p->free_ring), &(pollset->p->dead_ring),
+ pfd_elem_t, link);
- pollset_unlock_rings();
- }
+ pollset_unlock_rings();
return rv;
}
diff --git a/poll/unix/port.c b/poll/unix/port.c
index f5c7a01c4..638a8cba7 100644
--- a/poll/unix/port.c
+++ b/poll/unix/port.c
@@ -159,7 +159,7 @@ static apr_status_t impl_pollset_create(apr_pollset_t *pollset,
apr_uint32_t flags)
{
apr_status_t rv = APR_SUCCESS;
- pollset->p = apr_pcalloc(p, sizeof(apr_pollset_private_t));
+ pollset->p = apr_palloc(p, sizeof(apr_pollset_private_t));
#if APR_HAS_THREADS
if (flags & APR_POLLSET_THREADSAFE &&
((rv = apr_thread_mutex_create(&pollset->p->ring_lock,
@@ -206,12 +206,10 @@ static apr_status_t impl_pollset_create(apr_pollset_t *pollset,
pollset->p->result_set = apr_palloc(p, size * sizeof(apr_pollfd_t));
- if (!(pollset->flags & APR_POLLSET_NOCOPY)) {
- APR_RING_INIT(&pollset->p->query_ring, pfd_elem_t, link);
- APR_RING_INIT(&pollset->p->add_ring, pfd_elem_t, link);
- APR_RING_INIT(&pollset->p->free_ring, pfd_elem_t, link);
- APR_RING_INIT(&pollset->p->dead_ring, pfd_elem_t, link);
- }
+ APR_RING_INIT(&pollset->p->query_ring, pfd_elem_t, link);
+ APR_RING_INIT(&pollset->p->add_ring, pfd_elem_t, link);
+ APR_RING_INIT(&pollset->p->free_ring, pfd_elem_t, link);
+ APR_RING_INIT(&pollset->p->dead_ring, pfd_elem_t, link);
return rv;
}
@@ -224,6 +222,19 @@ static apr_status_t impl_pollset_add(apr_pollset_t *pollset,
int res;
apr_status_t rv = APR_SUCCESS;
+ pollset_lock_rings();
+
+ if (!APR_RING_EMPTY(&(pollset->p->free_ring), pfd_elem_t, link)) {
+ elem = APR_RING_FIRST(&(pollset->p->free_ring));
+ APR_RING_REMOVE(elem, link);
+ }
+ else {
+ elem = (pfd_elem_t *) apr_palloc(pollset->pool, sizeof(pfd_elem_t));
+ APR_RING_ELEM_INIT(elem, link);
+ elem->on_query_ring = 0;
+ }
+ elem->pfd = *descriptor;
+
if (descriptor->desc_type == APR_POLL_SOCKET) {
fd = descriptor->desc.s->socketdes;
}
@@ -231,53 +242,28 @@ static apr_status_t impl_pollset_add(apr_pollset_t *pollset,
fd = descriptor->desc.f->filedes;
}
- if (pollset->flags & APR_POLLSET_NOCOPY) {
+ /* If another thread is polling, notify the kernel immediately; otherwise,
+ * wait until the next call to apr_pollset_poll().
+ */
+ if (apr_atomic_read32(&pollset->p->waiting)) {
res = port_associate(pollset->p->port_fd, PORT_SOURCE_FD, fd,
- get_event(descriptor->reqevents), (void *)descriptor);
+ get_event(descriptor->reqevents), (void *)elem);
if (res < 0) {
rv = apr_get_netos_error();
- }
- }
- else {
- pollset_lock_rings();
-
- if (!APR_RING_EMPTY(&(pollset->p->free_ring), pfd_elem_t, link)) {
- elem = APR_RING_FIRST(&(pollset->p->free_ring));
- APR_RING_REMOVE(elem, link);
- }
- else {
- elem = (pfd_elem_t *) apr_palloc(pollset->pool, sizeof(pfd_elem_t));
- APR_RING_ELEM_INIT(elem, link);
- elem->on_query_ring = 0;
- }
- elem->pfd = *descriptor;
-
- /* If another thread is polling, notify the kernel immediately; otherwise,
- * wait until the next call to apr_pollset_poll().
- */
- if (apr_atomic_read32(&pollset->p->waiting)) {
- res = port_associate(pollset->p->port_fd, PORT_SOURCE_FD, fd,
- get_event(descriptor->reqevents), (void *)elem);
-
- if (res < 0) {
- rv = apr_get_netos_error();
- APR_RING_INSERT_TAIL(&(pollset->p->free_ring), elem,
- pfd_elem_t, link);
- }
- else {
- elem->on_query_ring = 1;
- APR_RING_INSERT_TAIL(&(pollset->p->query_ring), elem,
- pfd_elem_t, link);
- }
+ APR_RING_INSERT_TAIL(&(pollset->p->free_ring), elem, pfd_elem_t, link);
}
else {
- APR_RING_INSERT_TAIL(&(pollset->p->add_ring), elem, pfd_elem_t, link);
+ elem->on_query_ring = 1;
+ APR_RING_INSERT_TAIL(&(pollset->p->query_ring), elem, pfd_elem_t, link);
}
-
- pollset_unlock_rings();
+ }
+ else {
+ APR_RING_INSERT_TAIL(&(pollset->p->add_ring), elem, pfd_elem_t, link);
}
+ pollset_unlock_rings();
+
return rv;
}
@@ -289,7 +275,9 @@ static apr_status_t impl_pollset_remove(apr_pollset_t *pollset,
apr_status_t rv = APR_SUCCESS;
int res;
int err = 0;
- int found = 0;
+ int found;
+
+ pollset_lock_rings();
if (descriptor->desc_type == APR_POLL_SOCKET) {
fd = descriptor->desc.s->socketdes;
@@ -298,36 +286,34 @@ static apr_status_t impl_pollset_remove(apr_pollset_t *pollset,
fd = descriptor->desc.f->filedes;
}
- if (!(pollset->flags & APR_POLLSET_NOCOPY)) {
- pollset_lock_rings();
-
- /* Search the add ring first. This ring is often shorter,
- * and it often contains the descriptor being removed.
- * (For the common scenario where apr_pollset_poll()
- * returns activity for the descriptor and the descriptor
- * is then removed from the pollset, it will have just
- * been moved to the add ring by apr_pollset_poll().)
- *
- * If it is on the add ring, it isn't associated with the
- * event port yet/anymore.
- */
- for (ep = APR_RING_FIRST(&(pollset->p->add_ring));
- ep != APR_RING_SENTINEL(&(pollset->p->add_ring),
- pfd_elem_t, link);
- ep = APR_RING_NEXT(ep, link)) {
-
- if (descriptor->desc.s == ep->pfd.desc.s) {
- found = 1;
- APR_RING_REMOVE(ep, link);
- APR_RING_INSERT_TAIL(&(pollset->p->free_ring),
- ep, pfd_elem_t, link);
- break;
- }
+ /* Search the add ring first. This ring is often shorter,
+ * and it often contains the descriptor being removed.
+ * (For the common scenario where apr_pollset_poll()
+ * returns activity for the descriptor and the descriptor
+ * is then removed from the pollset, it will have just
+ * been moved to the add ring by apr_pollset_poll().)
+ *
+ * If it is on the add ring, it isn't associated with the
+ * event port yet/anymore.
+ */
+ found = 0;
+ for (ep = APR_RING_FIRST(&(pollset->p->add_ring));
+ ep != APR_RING_SENTINEL(&(pollset->p->add_ring),
+ pfd_elem_t, link);
+ ep = APR_RING_NEXT(ep, link)) {
+
+ if (descriptor->desc.s == ep->pfd.desc.s) {
+ found = 1;
+ APR_RING_REMOVE(ep, link);
+ APR_RING_INSERT_TAIL(&(pollset->p->free_ring),
+ ep, pfd_elem_t, link);
+ break;
}
}
if (!found) {
res = port_dissociate(pollset->p->port_fd, PORT_SOURCE_FD, fd);
+
if (res < 0) {
/* The expected case for this failure is that another
* thread's call to port_getn() returned this fd and
@@ -339,29 +325,25 @@ static apr_status_t impl_pollset_remove(apr_pollset_t *pollset,
rv = APR_NOTFOUND;
}
- if (!(pollset->flags & APR_POLLSET_NOCOPY)) {
- for (ep = APR_RING_FIRST(&(pollset->p->query_ring));
- ep != APR_RING_SENTINEL(&(pollset->p->query_ring),
- pfd_elem_t, link);
- ep = APR_RING_NEXT(ep, link)) {
-
- if (descriptor->desc.s == ep->pfd.desc.s) {
- APR_RING_REMOVE(ep, link);
- ep->on_query_ring = 0;
- APR_RING_INSERT_TAIL(&(pollset->p->dead_ring),
- ep, pfd_elem_t, link);
- if (ENOENT == err) {
- rv = APR_SUCCESS;
- }
- break;
+ for (ep = APR_RING_FIRST(&(pollset->p->query_ring));
+ ep != APR_RING_SENTINEL(&(pollset->p->query_ring),
+ pfd_elem_t, link);
+ ep = APR_RING_NEXT(ep, link)) {
+
+ if (descriptor->desc.s == ep->pfd.desc.s) {
+ APR_RING_REMOVE(ep, link);
+ ep->on_query_ring = 0;
+ APR_RING_INSERT_TAIL(&(pollset->p->dead_ring),
+ ep, pfd_elem_t, link);
+ if (ENOENT == err) {
+ rv = APR_SUCCESS;
}
+ break;
}
- pollset_unlock_rings();
}
}
- else if (!(pollset->flags & APR_POLLSET_NOCOPY)) {
- pollset_unlock_rings();
- }
+
+ pollset_unlock_rings();
return rv;
}
@@ -381,89 +363,73 @@ static apr_status_t impl_pollset_poll(apr_pollset_t *pollset,
*num = 0;
nget = 1;
- if (!(pollset->flags & APR_POLLSET_NOCOPY)) {
- pollset_lock_rings();
+ pollset_lock_rings();
- apr_atomic_inc32(&pollset->p->waiting);
+ apr_atomic_inc32(&pollset->p->waiting);
- while (!APR_RING_EMPTY(&(pollset->p->add_ring), pfd_elem_t, link)) {
- ep = APR_RING_FIRST(&(pollset->p->add_ring));
- APR_RING_REMOVE(ep, link);
-
- if (ep->pfd.desc_type == APR_POLL_SOCKET) {
- fd = ep->pfd.desc.s->socketdes;
- }
- else {
- fd = ep->pfd.desc.f->filedes;
- }
+ while (!APR_RING_EMPTY(&(pollset->p->add_ring), pfd_elem_t, link)) {
+ ep = APR_RING_FIRST(&(pollset->p->add_ring));
+ APR_RING_REMOVE(ep, link);
- ret = port_associate(pollset->p->port_fd, PORT_SOURCE_FD,
- fd, get_event(ep->pfd.reqevents), ep);
- if (ret < 0) {
- rv = apr_get_netos_error();
- APR_RING_INSERT_TAIL(&(pollset->p->free_ring), ep, pfd_elem_t, link);
- break;
- }
+ if (ep->pfd.desc_type == APR_POLL_SOCKET) {
+ fd = ep->pfd.desc.s->socketdes;
+ }
+ else {
+ fd = ep->pfd.desc.f->filedes;
+ }
- ep->on_query_ring = 1;
- APR_RING_INSERT_TAIL(&(pollset->p->query_ring), ep, pfd_elem_t, link);
+ ret = port_associate(pollset->p->port_fd, PORT_SOURCE_FD,
+ fd, get_event(ep->pfd.reqevents), ep);
+ if (ret < 0) {
+ rv = apr_get_netos_error();
+ APR_RING_INSERT_TAIL(&(pollset->p->free_ring), ep, pfd_elem_t, link);
+ break;
}
- pollset_unlock_rings();
+ ep->on_query_ring = 1;
+ APR_RING_INSERT_TAIL(&(pollset->p->query_ring), ep, pfd_elem_t, link);
+ }
- if (rv != APR_SUCCESS) {
- apr_atomic_dec32(&pollset->p->waiting);
- return rv;
- }
+ pollset_unlock_rings();
+
+ if (rv != APR_SUCCESS) {
+ apr_atomic_dec32(&pollset->p->waiting);
+ return rv;
}
rv = call_port_getn(pollset->p->port_fd, pollset->p->port_set,
pollset->nalloc, &nget, timeout);
- if (!(pollset->flags & APR_POLLSET_NOCOPY)) {
- /* decrease the waiting ASAP to reduce the window for calling
- port_associate within apr_pollset_add() */
- apr_atomic_dec32(&pollset->p->waiting);
+ /* decrease the waiting ASAP to reduce the window for calling
+ port_associate within apr_pollset_add() */
+ apr_atomic_dec32(&pollset->p->waiting);
- pollset_lock_rings();
- }
+ pollset_lock_rings();
for (i = 0, j = 0; i < nget; i++) {
- const apr_poll_fd_t *pfd;
-
- if (pollset->flags & APR_POLLSET_NOCOPY) {
- pfd = (apr_pollfd_t *)pollset->p->port_set[i].portev_user;
- }
- else {
- ep = (pfd_elem_t *)pollset->p->port_set[i].portev_user;
- pfd = &ep->pfd;
- }
-
+ ep = (pfd_elem_t *)pollset->p->port_set[i].portev_user;
if ((pollset->flags & APR_POLLSET_WAKEABLE) &&
- pfd->desc_type == APR_POLL_FILE &&
- pfd->desc.f == pollset->wakeup_pipe[0]) {
+ ep->pfd.desc_type == APR_POLL_FILE &&
+ ep->pfd.desc.f == pollset->wakeup_pipe[0]) {
apr_poll_drain_wakeup_pipe(&pollset->wakeup_set, pollset->wakeup_pipe);
rv = APR_EINTR;
}
else {
- pollset->p->result_set[j] = *pfd;
+ pollset->p->result_set[j] = ep->pfd;
pollset->p->result_set[j].rtnevents =
get_revent(pollset->p->port_set[i].portev_events);
j++;
}
-
- if (!(pollset->flags & APR_POLLSET_NOCOPY)) {
- /* If the ring element is still on the query ring, move it
- * to the add ring for re-association with the event port
- * later. (It may have already been moved to the dead ring
- * by a call to pollset_remove on another thread.)
- */
- if (ep->on_query_ring) {
- APR_RING_REMOVE(ep, link);
- ep->on_query_ring = 0;
- APR_RING_INSERT_TAIL(&(pollset->p->add_ring), ep,
- pfd_elem_t, link);
- }
+ /* If the ring element is still on the query ring, move it
+ * to the add ring for re-association with the event port
+ * later. (It may have already been moved to the dead ring
+ * by a call to pollset_remove on another thread.)
+ */
+ if (ep->on_query_ring) {
+ APR_RING_REMOVE(ep, link);
+ ep->on_query_ring = 0;
+ APR_RING_INSERT_TAIL(&(pollset->p->add_ring), ep,
+ pfd_elem_t, link);
}
}
if ((*num = j)) { /* any event besides wakeup pipe? */
@@ -473,13 +439,10 @@ static apr_status_t impl_pollset_poll(apr_pollset_t *pollset,
}
}
- if (!(pollset->flags & APR_POLLSET_NOCOPY)) {
- /* Shift all PFDs in the Dead Ring to the Free Ring */
- APR_RING_CONCAT(&(pollset->p->free_ring), &(pollset->p->dead_ring),
- pfd_elem_t, link);
+ /* Shift all PFDs in the Dead Ring to the Free Ring */
+ APR_RING_CONCAT(&(pollset->p->free_ring), &(pollset->p->dead_ring), pfd_elem_t, link);
- pollset_unlock_rings();
- }
+ pollset_unlock_rings();
return rv;
}