Author: markt Date: Tue Apr 30 10:39:36 2013 New Revision: 1477543 URL: http://svn.apache.org/r1477543 Log: Remove the request.isAsyncOperation() method and the associated plumbing as res.getWriteListener() != null does the same thing with less code. Add a (currently unimplemented) dispatch() line from READ_WRITE_OP to the state diagram.
Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java tomcat/trunk/java/org/apache/catalina/connector/Request.java tomcat/trunk/java/org/apache/coyote/ActionCode.java tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java tomcat/trunk/java/org/apache/coyote/spdy/SpdyProcessor.java Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java?rev=1477543&r1=1477542&r2=1477543&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Tue Apr 30 10:39:36 2013 @@ -345,44 +345,37 @@ public class CoyoteAdapter implements Ad } } - - if (!request.isAsyncDispatching() && request.isAsync() && - request.isAsyncOperation()) { - if (status == SocketStatus.OPEN_WRITE) { - if (res.getWriteListener() == null) { - success = false; - } else { - ClassLoader oldCL = - Thread.currentThread().getContextClassLoader(); - ClassLoader newCL = - request.getContext().getLoader().getClassLoader(); - try { - Thread.currentThread().setContextClassLoader(newCL); - res.getWriteListener().onWritePossible(); - } finally { - Thread.currentThread().setContextClassLoader(oldCL); - } - success = true; + // Check to see if non-blocking writes are reads are being used + if (!request.isAsyncDispatching() && request.isAsync()) { + if (res.getWriteListener() != null && + status == SocketStatus.OPEN_WRITE) { + ClassLoader oldCL = + Thread.currentThread().getContextClassLoader(); + ClassLoader newCL = + request.getContext().getLoader().getClassLoader(); + try { + Thread.currentThread().setContextClassLoader(newCL); + res.getWriteListener().onWritePossible(); + } finally { + Thread.currentThread().setContextClassLoader(oldCL); } - } else if (status == SocketStatus.OPEN_READ) { - if (req.getReadListener() == null) { - success = false; - } else { - ClassLoader oldCL = - Thread.currentThread().getContextClassLoader(); - ClassLoader newCL = - request.getContext().getLoader().getClassLoader(); - try { - Thread.currentThread().setContextClassLoader(newCL); - req.getReadListener().onDataAvailable(); - if (request.getInputStream().isFinished()) { - req.getReadListener().onAllDataRead(); - } - } finally { - Thread.currentThread().setContextClassLoader(oldCL); + success = true; + } else if (req.getReadListener() != null && + status == SocketStatus.OPEN_READ) { + ClassLoader oldCL = + Thread.currentThread().getContextClassLoader(); + ClassLoader newCL = + request.getContext().getLoader().getClassLoader(); + try { + Thread.currentThread().setContextClassLoader(newCL); + req.getReadListener().onDataAvailable(); + if (request.getInputStream().isFinished()) { + req.getReadListener().onAllDataRead(); } - success = true; + } finally { + Thread.currentThread().setContextClassLoader(oldCL); } + success = true; } } Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Request.java?rev=1477543&r1=1477542&r2=1477543&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Tue Apr 30 10:39:36 2013 @@ -1661,16 +1661,6 @@ public class Request return result.get(); } - public boolean isAsyncOperation() { - if (asyncContext == null) { - return false; - } - - AtomicBoolean result = new AtomicBoolean(false); - coyoteRequest.action(ActionCode.ASYNC_IS_ASYNC_OPERATION, result); - return result.get(); - } - @Override public boolean isAsyncSupported() { if (this.asyncSupported == null) { Modified: tomcat/trunk/java/org/apache/coyote/ActionCode.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ActionCode.java?rev=1477543&r1=1477542&r2=1477543&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ActionCode.java (original) +++ tomcat/trunk/java/org/apache/coyote/ActionCode.java Tue Apr 30 10:39:36 2013 @@ -176,11 +176,6 @@ public enum ActionCode { ASYNC_IS_ASYNC, /** - * Callback to determine if async read/write is in progress - */ - ASYNC_IS_ASYNC_OPERATION, - - /** * Callback to determine if async dispatch is in progress */ ASYNC_IS_STARTED, Modified: tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java?rev=1477543&r1=1477542&r2=1477543&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java (original) +++ tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java Tue Apr 30 10:39:36 2013 @@ -71,26 +71,28 @@ import org.apache.tomcat.util.res.String * | | | | | | | /-----------| | * | | | ^ |dispatch() | | / | * | | | | | | | / | - * | | | | \|/ / \|/ / postProcess() | + * | | | | \|/ / \|/ / postProcess() | * | | | | MUST_DISPATCH / STARTED<---------<---------| | - * | | | | | / /| \ | | - * | | | | |postProcess() / / | \ | | - * ^ | ^ | | / dispatch()/ | \ | | - * | | | | | / / | \ | | - * | | | | | |---------- / -----------/ |auto \ | | - * | | | | | | / | \ | | - * | | | | | | |-----/ | | | | - * | | | | auto \|/ \|/ \|/ \|/ | | | - * | | | |---<------DISPATCHING<-----------------TIMING_OUT | | | - * | | | dispatch() | | |asyncOperation() ^ | - * | | | | | \|/ | ^ - * | | |-------<----------------------------------<------| | READ_WRITE_OP->-----| | - * | | complete() | | | | - * | | | | | error() | - * |<- | ----<-------------------<-------------------------------<--| | |->-----------| - * | error() | - * | complete() | - * |---------------------------------------------------------------------| + * | | | | | / / | | | | + * | | | | |postProcess() / / | | ^ | + * ^ | ^ | | / / | |asyncOperation() | | + * | | | | | / / | | | | + * | | | | | |---------- / ----------/ | |--READ_WRITE_OP-->---| | + * | | | | | | / dispatch() | | | | | + * | | | | | | |-----/ auto| | | | error()| + * | | | | auto \|/ \|/ \|/ | dispatch()| | |->--------| + * | | | |---<------DISPATCHING<--------<------------- | ------<----| | + * | | | /|\ | | + * | | | | dispatch() \|/ | + * | | | |-----------------------TIMING_OUT | + * | | | | | | + * | | |-------<----------------------------------<------| | | + * | | complete() | | + * | | | | + * |<- | ----<-------------------<-------------------------------<--| | + * | error() | + * | complete() | + * |----------------------------------------------------------------------------| * </pre> */ public class AsyncStateMachine<S> { @@ -153,10 +155,6 @@ public class AsyncStateMachine<S> { return state.isAsync(); } - public boolean isAsyncOperation() { - return state == AsyncState.READ_WRITE_OP; - } - public boolean isAsyncDispatching() { return state.isDispatching(); } Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1477543&r1=1477542&r2=1477543&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Tue Apr 30 10:39:36 2013 @@ -456,8 +456,6 @@ public abstract class AbstractAjpProcess ((AtomicBoolean) param).set(asyncStateMachine.isAsyncDispatching()); } else if (actionCode == ActionCode.ASYNC_IS_ASYNC) { ((AtomicBoolean) param).set(asyncStateMachine.isAsync()); - } else if (actionCode == ActionCode.ASYNC_IS_ASYNC_OPERATION) { - ((AtomicBoolean) param).set(asyncStateMachine.isAsyncOperation()); } else if (actionCode == ActionCode.ASYNC_IS_TIMINGOUT) { ((AtomicBoolean) param).set(asyncStateMachine.isAsyncTimingOut()); } else if (actionCode == ActionCode.ASYNC_IS_ERROR) { Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java?rev=1477543&r1=1477542&r2=1477543&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java Tue Apr 30 10:39:36 2013 @@ -797,8 +797,6 @@ public abstract class AbstractHttp11Proc ((AtomicBoolean) param).set(asyncStateMachine.isAsyncDispatching()); } else if (actionCode == ActionCode.ASYNC_IS_ASYNC) { ((AtomicBoolean) param).set(asyncStateMachine.isAsync()); - } else if (actionCode == ActionCode.ASYNC_IS_ASYNC_OPERATION) { - ((AtomicBoolean) param).set(asyncStateMachine.isAsyncOperation()); } else if (actionCode == ActionCode.ASYNC_IS_TIMINGOUT) { ((AtomicBoolean) param).set(asyncStateMachine.isAsyncTimingOut()); } else if (actionCode == ActionCode.ASYNC_IS_ERROR) { Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?rev=1477543&r1=1477542&r2=1477543&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Tue Apr 30 10:39:36 2013 @@ -196,7 +196,7 @@ public class Http11NioProcessor extends if (status == SocketStatus.OPEN_WRITE && isRegisteredForWrite(attach)) { return SocketState.LONG; } - }catch (IllegalStateException x) { + } catch (IllegalStateException x) { attach.interestOps(attach.interestOps() | SelectionKey.OP_WRITE); } } else if (status == SocketStatus.OPEN_READ) { Modified: tomcat/trunk/java/org/apache/coyote/spdy/SpdyProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/spdy/SpdyProcessor.java?rev=1477543&r1=1477542&r2=1477543&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/spdy/SpdyProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/spdy/SpdyProcessor.java Tue Apr 30 10:39:36 2013 @@ -372,8 +372,6 @@ public class SpdyProcessor extends Abstr ((AtomicBoolean) param).set(asyncStateMachine.isAsyncDispatching()); } else if (actionCode == ActionCode.ASYNC_IS_ASYNC) { ((AtomicBoolean) param).set(asyncStateMachine.isAsync()); - } else if (actionCode == ActionCode.ASYNC_IS_ASYNC_OPERATION) { - ((AtomicBoolean) param).set(asyncStateMachine.isAsyncOperation()); } else if (actionCode == ActionCode.ASYNC_IS_TIMINGOUT) { ((AtomicBoolean) param).set(asyncStateMachine.isAsyncTimingOut()); } else if (actionCode == ActionCode.ASYNC_IS_ERROR) { --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org