Author: markt Date: Wed Nov 12 10:49:29 2014 New Revision: 1638754 URL: http://svn.apache.org/r1638754 Log: Use SocketWrapper's write method for AJP APR
Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1638754&r1=1638753&r2=1638754&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Wed Nov 12 10:49:29 2014 @@ -57,7 +57,6 @@ public class AjpAprProcessor extends Abs // Allocate input and output buffers inputBuffer = ByteBuffer.allocateDirect(packetSize * 2); inputBuffer.limit(0); - outputBuffer = ByteBuffer.allocateDirect(packetSize * 2); } @@ -67,12 +66,6 @@ public class AjpAprProcessor extends Abs protected final ByteBuffer inputBuffer; - /** - * Direct buffer used for output. - */ - protected final ByteBuffer outputBuffer; - - @Override protected void registerForEvent(boolean read, boolean write) { ((AprEndpoint) endpoint).getPoller().add( @@ -84,7 +77,6 @@ public class AjpAprProcessor extends Abs protected void setupSocket(SocketWrapperBase<Long> socketWrapper) { long socketRef = socketWrapper.getSocket().longValue(); Socket.setrbb(socketRef, inputBuffer); - Socket.setsbb(socketRef, outputBuffer); } @@ -92,74 +84,7 @@ public class AjpAprProcessor extends Abs protected int output(byte[] src, int offset, int length, boolean block) throws IOException { - if (length == 0) { - return 0; - } - - outputBuffer.put(src, offset, length); - - int result = -1; - - if (socketWrapper.getSocket().longValue() != 0) { - result = writeSocket(0, outputBuffer.position(), block); - if (Status.APR_STATUS_IS_EAGAIN(-result)) { - result = 0; - } - if (result < 0) { - // There are no re-tries so clear the buffer to prevent a - // possible overflow if the buffer is used again. BZ53119. - outputBuffer.clear(); - throw new IOException(sm.getString("ajpprocessor.failedsend")); - } - } - outputBuffer.clear(); - - return result; - } - - - private int writeSocket(int pos, int len, boolean block) { - - Lock readLock = socketWrapper.getBlockingStatusReadLock(); - WriteLock writeLock = socketWrapper.getBlockingStatusWriteLock(); - long socket = socketWrapper.getSocket().longValue(); - - boolean writeDone = false; - int result = 0; - readLock.lock(); - try { - if (socketWrapper.getBlockingStatus() == block) { - result = Socket.sendbb(socket, pos, len); - writeDone = true; - } - } finally { - readLock.unlock(); - } - - if (!writeDone) { - writeLock.lock(); - try { - socketWrapper.setBlockingStatus(block); - // Set the current settings for this socket - Socket.optSet(socket, Socket.APR_SO_NONBLOCK, (block ? 0 : 1)); - // Downgrade the lock - readLock.lock(); - try { - writeLock.unlock(); - result = Socket.sendbb(socket, pos, len); - } finally { - readLock.unlock(); - } - } finally { - // Should have been released above but may not have been on some - // exception paths - if (writeLock.isHeldByCurrentThread()) { - writeLock.unlock(); - } - } - } - - return result; + return socketWrapper.write(block, src, offset, length); } @@ -269,7 +194,5 @@ public class AjpAprProcessor extends Abs inputBuffer.clear(); inputBuffer.limit(0); - outputBuffer.clear(); - } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org