summaryrefslogtreecommitdiff
path: root/poll
diff options
context:
space:
mode:
authorPaul Querna <pquerna@apache.org>2005-06-30 00:56:39 +0000
committerPaul Querna <pquerna@apache.org>2005-06-30 00:56:39 +0000
commitb8bcefc39e0fe6f719ef2ae033e1374980a88e15 (patch)
treefdda52991a43f83ed81e5373dcbc754552f1b0af /poll
parent2a5c4d848b98f5bb2ea3c3738d7b0f9af9f08c79 (diff)
downloadapr-b8bcefc39e0fe6f719ef2ae033e1374980a88e15.tar.gz
Fix corruption of the pollset rings on Solaris 10. A pfd_elem_t was being inserted into a new ring without being removed first, corrupting the source ring.
Found and tested in the httpd zone on Helios. git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@202460 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'poll')
-rw-r--r--poll/unix/port.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/poll/unix/port.c b/poll/unix/port.c
index f2350ee99..dde105ee9 100644
--- a/poll/unix/port.c
+++ b/poll/unix/port.c
@@ -282,6 +282,8 @@ APR_DECLARE(apr_status_t) apr_pollset_poll(apr_pollset_t *pollset,
port_associate(pollset->port_fd, PORT_SOURCE_FD,
fd, get_event(ep->pfd.reqevents), ep);
+ APR_RING_INSERT_TAIL(&(pollset->query_ring), ep, pfd_elem_t, link);
+
}
pollset_unlock_rings();
@@ -313,6 +315,8 @@ APR_DECLARE(apr_status_t) apr_pollset_poll(apr_pollset_t *pollset,
pollset->result_set[i].rtnevents =
get_revent(pollset->port_set[i].portev_events);
+ APR_RING_REMOVE((pfd_elem_t*)pollset->port_set[i].portev_user, link);
+
APR_RING_INSERT_TAIL(&(pollset->add_ring),
(pfd_elem_t*)pollset->port_set[i].portev_user,
pfd_elem_t, link);