mturk 2005/06/17 02:43:35 Modified: http11/src/java/org/apache/coyote/http11 Http11AprProcessor.java Http11AprProtocol.java jk/java/org/apache/coyote/ajp AjpAprProcessor.java AjpAprProtocol.java util/java/org/apache/tomcat/util/net AprEndpoint.java Log: Implement new socket abstraction. We don't need to maintain the pool, so the poll size can be half the size. Revision Changes Path 1.15 +3 -3 jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11AprProcessor.java Index: Http11AprProcessor.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11AprProcessor.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- Http11AprProcessor.java 26 May 2005 09:06:16 -0000 1.14 +++ Http11AprProcessor.java 17 Jun 2005 09:43:35 -0000 1.15 @@ -729,7 +729,7 @@ * * @throws IOException error during an I/O operation */ - public boolean process(long socket, long pool) + public boolean process(long socket) throws IOException { ThreadWithAttributes thrA= (ThreadWithAttributes)Thread.currentThread(); @@ -779,7 +779,7 @@ rp.setStage(org.apache.coyote.Constants.STAGE_ENDED); openSocket = true; // Add the socket to the poller - endpoint.getPoller().add(socket, pool); + endpoint.getPoller().add(socket); break; } request.setStartTime(System.currentTimeMillis()); @@ -884,7 +884,7 @@ // Do sendfile as needed: add socket to sendfile and end if (sendfileData != null) { sendfileData.socket = socket; - sendfileData.pool = pool; + sendfileData.pool = 0; if (!endpoint.getSendfile().add(sendfileData)) { keepAlive = false; } 1.9 +2 -2 jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11AprProtocol.java Index: Http11AprProtocol.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11AprProtocol.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- Http11AprProtocol.java 27 May 2005 15:40:23 -0000 1.8 +++ Http11AprProtocol.java 17 Jun 2005 09:43:35 -0000 1.9 @@ -664,7 +664,7 @@ return thData; } - public boolean process(long socket, long pool) { + public boolean process(long socket) { Http11AprProcessor processor=null; try { // FIXME: It is also possible to use the TWA data, so keep init() [] for @@ -696,7 +696,7 @@ processor.setSocket( socket ); */ - return processor.process(socket, pool); + return processor.process(socket); } catch(java.net.SocketException e) { // SocketExceptions are normal 1.5 +2 -2 jakarta-tomcat-connectors/jk/java/org/apache/coyote/ajp/AjpAprProcessor.java Index: AjpAprProcessor.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/coyote/ajp/AjpAprProcessor.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- AjpAprProcessor.java 16 Jun 2005 11:52:26 -0000 1.4 +++ AjpAprProcessor.java 17 Jun 2005 09:43:35 -0000 1.5 @@ -352,7 +352,7 @@ * * @throws IOException error during an I/O operation */ - public boolean process(long socket, long pool) + public boolean process(long socket) throws IOException { ThreadWithAttributes thrA= (ThreadWithAttributes)Thread.currentThread(); @@ -464,7 +464,7 @@ // Add the socket to the poller if (!error) { - endpoint.getPoller().add(socket, pool); + endpoint.getPoller().add(socket); } else { openSocket = false; } 1.2 +2 -2 jakarta-tomcat-connectors/jk/java/org/apache/coyote/ajp/AjpAprProtocol.java Index: AjpAprProtocol.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/coyote/ajp/AjpAprProtocol.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- AjpAprProtocol.java 9 Jun 2005 16:14:51 -0000 1.1 +++ AjpAprProtocol.java 17 Jun 2005 09:43:35 -0000 1.2 @@ -568,7 +568,7 @@ return thData; } - public boolean process(long socket, long pool) { + public boolean process(long socket) { AjpAprProcessor processor=null; try { // FIXME: It is also possible to use the TWA data, so keep init() [] for @@ -600,7 +600,7 @@ processor.setSocket( socket ); */ - return processor.process(socket, pool); + return processor.process(socket); } catch(java.net.SocketException e) { // SocketExceptions are normal 1.46 +31 -35 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.45 retrieving revision 1.46 diff -u -r1.45 -r1.46 --- AprEndpoint.java 14 Jun 2005 13:14:19 -0000 1.45 +++ AprEndpoint.java 17 Jun 2005 09:43:35 -0000 1.46 @@ -576,7 +576,7 @@ /** * Process the specified connection. */ - protected boolean processSocket(long socket, long pool) { + protected boolean processSocket(long socket) { // Process the connection int step = 1; boolean result = true; @@ -596,7 +596,7 @@ // 3: Process the connection step = 3; - result = getHandler().process(socket, pool); + result = getHandler().process(socket); } catch (Throwable t) { if (step == 2) { @@ -728,7 +728,7 @@ pool = Pool.create(serverSockPool); socket = Socket.accept(serverSock, pool); // Hand this socket off to an appropriate processor - workerThread.assign(socket, pool); + workerThread.assign(socket); } catch (Exception e) { log.error(sm.getString("endpoint.accept.fail"), e); } @@ -760,7 +760,6 @@ protected long[] desc; protected long[] addS; - protected long[] addP; protected int addCount = 0; /** @@ -785,10 +784,9 @@ log.error(sm.getString("endpoint.poll.initfail"), e); } } - desc = new long[pollerSize * 4]; + desc = new long[pollerSize * 2]; keepAliveCount = 0; addS = new long[pollerSize]; - addP = new long[pollerSize]; addCount = 0; } @@ -798,13 +796,13 @@ protected void destroy() { // Close all sockets in the add queue for (int i = 0; i < addCount; i--) { - Pool.destroy(addP[i]); + Socket.destroy(addS[i]); } // Close all sockets still in the poller int rv = Poll.pollset(serverPollset, desc); if (rv > 0) { for (int n = 0; n < rv; n++) { - Pool.destroy(desc[n*4+2]); + Socket.destroy(desc[n*2+1]); } } Pool.destroy(pool); @@ -821,17 +819,16 @@ * @param socket to add to the poller * @param pool reprenting the memory used for the socket */ - public void add(long socket, long pool) { + public void add(long socket) { synchronized (addS) { // Add socket to the list. Newly added sockets will wait // at most for pollTime before being polled if (addCount >= addS.length) { // Can't do anything: close the socket right away - Pool.destroy(pool); + Socket.destroy(socket); return; } addS[addCount] = socket; - addP[addCount] = pool; addCount++; addS.notify(); } @@ -874,12 +871,12 @@ synchronized (addS) { for (int i = (addCount - 1); i >= 0; i--) { int rv = Poll.add - (serverPollset, addS[i], addP[i], Poll.APR_POLLIN); + (serverPollset, addS[i], Poll.APR_POLLIN); if (rv == Status.APR_SUCCESS) { keepAliveCount++; } else { // Can't do anything: close the socket right away - Pool.destroy(addP[i]); + Socket.destroy(addS[i]); } } addCount = 0; @@ -892,14 +889,14 @@ keepAliveCount -= rv; for (int n = 0; n < rv; n++) { // Check for failed sockets - if (((desc[n*4] & Poll.APR_POLLHUP) == Poll.APR_POLLHUP) - || ((desc[n*4] & Poll.APR_POLLERR) == Poll.APR_POLLERR)) { + if (((desc[n*2] & Poll.APR_POLLHUP) == Poll.APR_POLLHUP) + || ((desc[n*2] & Poll.APR_POLLERR) == Poll.APR_POLLERR)) { // Close socket and clear pool - Pool.destroy(desc[n*4+2]); + Socket.destroy(desc[n*2+1]); continue; } // Hand this socket off to a worker - getWorkerThread().assign(desc[n*4+1], desc[n*4+2]); + getWorkerThread().assign(desc[n*2+1]); } } else if (rv < 0) { /* Any non timeup error is critical */ @@ -919,7 +916,7 @@ keepAliveCount -= rv; for (int n = 0; n < rv; n++) { // Close socket and clear pool - Pool.destroy(desc[n*4+2]); + Socket.destroy(desc[n*2+1]); } } } @@ -951,7 +948,6 @@ protected Thread thread = null; protected boolean available = false; protected long socket = 0; - protected long pool = 0; /** @@ -963,7 +959,7 @@ * * @param socket TCP socket to process */ - protected synchronized void assign(long socket, long pool) { + protected synchronized void assign(long socket) { // Wait for the Processor to get the previous Socket while (available) { @@ -975,7 +971,6 @@ // Store the newly available Socket and notify our thread this.socket = socket; - this.pool = pool; available = true; notifyAll(); @@ -1021,10 +1016,10 @@ continue; // Process the request from this socket - if (!processSocket(socket, pool)) { + if (!processSocket(socket)) { // Close socket and pool - Pool.destroy(pool); - pool = 0; + Socket.destroy(socket); + socket = 0; } // Finish up this request @@ -1125,13 +1120,13 @@ // Close any socket remaining in the add queue for (int i = (addS.size() - 1); i >= 0; i--) { SendfileData data = (SendfileData) addS.get(i); - Pool.destroy(data.pool); + Socket.destroy(data.socket); } // Close all sockets still in the poller int rv = Poll.pollset(sendfilePollset, desc); if (rv > 0) { for (int n = 0; n < rv; n++) { - Pool.destroy(desc[n*4+2]); + Socket.destroy(desc[n*2+1]); } } Pool.destroy(pool); @@ -1151,7 +1146,7 @@ public boolean add(SendfileData data) { // Initialize fd from data given try { - data.fdpool = Pool.create(data.pool); + data.fdpool = Socket.pool(data.socket); data.fd = File.open (data.fileName, File.APR_FOPEN_READ | File.APR_FOPEN_SENDFILE_ENABLED | File.APR_FOPEN_BINARY, @@ -1164,7 +1159,8 @@ data.pos, data.end, 0); if (nw < 0) { if (!(-nw == Status.EAGAIN)) { - Poll.destroy(data.pool); + Socket.destroy(data.socket); + data.socket = 0; return false; } else { // Break the loop and add the socket to poller. @@ -1181,7 +1177,7 @@ } } } - } catch (Error e) { + } catch (Exception e) { log.error(sm.getString("endpoint.sendfile.error"), e); return false; } @@ -1243,7 +1239,7 @@ synchronized (addS) { for (int i = (addS.size() - 1); i >= 0; i--) { SendfileData data = (SendfileData) addS.get(i); - int rv = Poll.add(sendfilePollset, data.socket, 0, Poll.APR_POLLOUT); + int rv = Poll.add(sendfilePollset, data.socket, Poll.APR_POLLOUT); if (rv == Status.APR_SUCCESS) { sendfileData.put(new Long(data.socket), data); sendfileCount++; @@ -1264,8 +1260,8 @@ 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)) { + if (((desc[n*2] & Poll.APR_POLLHUP) == Poll.APR_POLLHUP) + || ((desc[n*2] & Poll.APR_POLLERR) == Poll.APR_POLLERR)) { // Close socket and clear pool remove(state); // Destroy file descriptor pool, which should close the file @@ -1275,7 +1271,7 @@ continue; } // Write some data using sendfile - long nw = Socket.sendfile(desc[n*4+1], state.fd, + long nw = Socket.sendfile(desc[n*2+1], state.fd, null, null, state.pos, state.end - state.pos, 0); if (nw < 0) { @@ -1294,7 +1290,7 @@ 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.pool); + getWorkerThread().assign(desc[n*2+1]); } } } else if (rv < 0) { @@ -1335,7 +1331,7 @@ * thread local fields. */ public interface Handler { - public boolean process(long socket, long pool); + public boolean process(long socket); }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]