remm 2005/04/19 17:13:25 Modified: util/java/org/apache/tomcat/util/net AprEndpoint.java Log: - Sendfile fixes (does not work yet, as the poller does really weird things). Revision Changes Path 1.13 +15 -17 jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/net/AprEndpoint.java Index: AprEndpoint.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/net/AprEndpoint.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- AprEndpoint.java 19 Apr 2005 18:56:58 -0000 1.12 +++ AprEndpoint.java 20 Apr 2005 00:13:24 -0000 1.13 @@ -988,7 +988,7 @@ /** * SendfileData class. */ - public class SendfileData { + public static class SendfileData { // File public String fileName; public long fd; @@ -1015,7 +1015,6 @@ protected long pool = 0; protected long[] desc; protected HashMap sendfileData; - protected SendfileData[] state; protected void init() { pool = Pool.create(serverSockPool); @@ -1040,7 +1039,6 @@ } desc = new long[sendfileSize * 4]; sendfileData = new HashMap(sendfileSize); - state = new SendfileData[sendfileSize]; } protected void destroy() { @@ -1117,41 +1115,41 @@ int rv = Poll.poll(sendfilePollset, pollTime, desc, false); if (rv > 0) { for (int n = 0; n < rv; n++) { + // Get the sendfile state + SendfileData state = + (SendfileData) sendfileData.get(new Long(desc[n*4+1])); // Problem events if (((desc[n*4] & Poll.APR_POLLHUP) == Poll.APR_POLLHUP) || ((desc[n*4] & Poll.APR_POLLERR) == Poll.APR_POLLERR)) { // Close socket and clear pool remove(desc[n*4+1]); // Destroy file descriptor pool, which should close the file - Pool.destroy(state[n].fdpool); + Pool.destroy(state.fdpool); // Close the socket, as the reponse would be incomplete - Pool.destroy(state[n].pool); + Pool.destroy(state.pool); continue; } - // Get the sendfile state - state[n] = - (SendfileData) sendfileData.get(new Long(desc[n*4+1])); // Write some data using sendfile - int nw = Socket.sendfilet(desc[n*4+1], state[n].fd, - null, null, state[n].pos, - (int) (state[n].end - state[n].pos), 0, 0); + int nw = Socket.sendfilet(desc[n*4+1], state.fd, + null, null, state.pos, + (int) (state.end - state.pos), 0, 0); if (nw < 0) { // Close socket and clear pool remove(desc[n*4+1]); // Destroy file descriptor pool, which should close the file - Pool.destroy(state[n].fdpool); + Pool.destroy(state.fdpool); // Close the socket, as the reponse would be incomplete - Pool.destroy(state[n].pool); + Pool.destroy(state.pool); continue; } - state[n].pos = state[n].pos + nw; - if (state[n].pos >= state[n].end) { + state.pos = state.pos + nw; + if (state.pos >= state.end) { remove(desc[n*4+1]); // Destroy file descriptor pool, which should close the file - Pool.destroy(state[n].fdpool); + Pool.destroy(state.fdpool); // If all done hand this socket off to a worker for // processing of further requests - getWorkerThread().assign(desc[n*4+1], state[n].pool); + getWorkerThread().assign(desc[n*4+1], state.pool); } } } else if (rv < 0) {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]