diff options
author | Paul Querna <pquerna@apache.org> | 2005-06-30 00:56:39 +0000 |
---|---|---|
committer | Paul Querna <pquerna@apache.org> | 2005-06-30 00:56:39 +0000 |
commit | b8bcefc39e0fe6f719ef2ae033e1374980a88e15 (patch) | |
tree | fdda52991a43f83ed81e5373dcbc754552f1b0af /poll | |
parent | 2a5c4d848b98f5bb2ea3c3738d7b0f9af9f08c79 (diff) | |
download | apr-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.c | 4 |
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); |