On 11/03/2015 14:44, ma...@apache.org wrote: > Author: markt > Date: Wed Mar 11 14:44:23 2015 > New Revision: 1665888 > > URL: http://svn.apache.org/r1665888 > Log: > Fix 57653. Crash when multiple events for same socket are returned via > separate apr_pollfd_t structures
Review appreciated from folks that understand C better than I do (i.e. pretty much anybody). Hopefully it is clear from the comment what I am trying to do here and why. Cheers, Mark > Modified: > tomcat/native/branches/1.1.x/native/src/poll.c > > Modified: tomcat/native/branches/1.1.x/native/src/poll.c > URL: > http://svn.apache.org/viewvc/tomcat/native/branches/1.1.x/native/src/poll.c?rev=1665888&r1=1665887&r2=1665888&view=diff > ============================================================================== > --- tomcat/native/branches/1.1.x/native/src/poll.c (original) > +++ tomcat/native/branches/1.1.x/native/src/poll.c Wed Mar 11 14:44:23 2015 > @@ -360,7 +360,13 @@ TCN_IMPLEMENT_CALL(jint, Poll, poll)(TCN > tcn_socket_t *s = (tcn_socket_t *)fd->client_data; > p->set[i*2+0] = (jlong)(fd->rtnevents); > p->set[i*2+1] = P2J(s); > - if (remove) { > + /* If a socket is registered for multiple events and the poller > has > + multiple events to return it may do as a single pair in this > + array or as multiple pairs depending on implementation. On > OSX at > + least, multiple pairs have been observed. In this case do not > try > + and remove socket from the pollset for a second time else a > crash > + will result. */ > + if (remove && s->pe) { > apr_pollset_remove(p->pollset, fd); > APR_RING_REMOVE(s->pe, link); > APR_RING_INSERT_TAIL(&p->dead_ring, s->pe, tcn_pfde_t, link); > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org > For additional commands, e-mail: dev-h...@tomcat.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org