Return-Path: Delivered-To: apmail-tomcat-dev-archive@www.apache.org Received: (qmail 29856 invoked from network); 5 Aug 2009 21:17:06 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 5 Aug 2009 21:17:06 -0000 Received: (qmail 7101 invoked by uid 500); 5 Aug 2009 21:17:13 -0000 Delivered-To: apmail-tomcat-dev-archive@tomcat.apache.org Received: (qmail 7017 invoked by uid 500); 5 Aug 2009 21:17:13 -0000 Mailing-List: contact dev-help@tomcat.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Tomcat Developers List" Delivered-To: mailing list dev@tomcat.apache.org Received: (qmail 7006 invoked by uid 99); 5 Aug 2009 21:17:13 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 05 Aug 2009 21:17:13 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 05 Aug 2009 21:17:10 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 6E92B2388872; Wed, 5 Aug 2009 21:16:50 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r801414 - in /tomcat/trunk/java/org/apache: catalina/connector/AsyncContextImpl.java coyote/http11/Http11NioProcessor.java Date: Wed, 05 Aug 2009 21:16:47 -0000 To: dev@tomcat.apache.org From: fhanik@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090805211650.6E92B2388872@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: fhanik Date: Wed Aug 5 21:16:47 2009 New Revision: 801414 URL: http://svn.apache.org/viewvc?rev=801414&view=rev Log: more work on the complete Modified: tomcat/trunk/java/org/apache/catalina/connector/AsyncContextImpl.java tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Modified: tomcat/trunk/java/org/apache/catalina/connector/AsyncContextImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/AsyncContextImpl.java?rev=801414&r1=801413&r2=801414&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/connector/AsyncContextImpl.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/AsyncContextImpl.java Wed Aug 5 21:16:47 2009 @@ -19,6 +19,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import javax.servlet.AsyncContext; @@ -35,6 +36,7 @@ import org.apache.coyote.ActionCode; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; +import org.apache.tomcat.util.MutableInteger; /** * * @author fhanik @@ -65,8 +67,12 @@ @Override public void complete() { - // TODO SERVLET3 - async - doInternalComplete(false); + if (state.compareAndSet(AsyncState.STARTED, AsyncState.COMPLETING)) { + // TODO SERVLET3 - async + AtomicBoolean dispatched = new AtomicBoolean(false); + request.coyoteRequest.action(ActionCode.ACTION_ASYNC_COMPLETE,dispatched); + if (!dispatched.get()) doInternalComplete(false); + } } @Override @@ -221,9 +227,15 @@ public void doInternalDispatch() throws ServletException, IOException { if (this.state.compareAndSet(AsyncState.TIMING_OUT, AsyncState.DISPATCHED)) { + boolean listenerInvoked = false; for (AsyncListenerWrapper listener : listeners) { listener.fireOnTimeout(); + listenerInvoked = true; + } + if (!listenerInvoked) { + ((HttpServletResponse)servletResponse).setStatus(500); } + doInternalComplete(true); } else if (this.state.compareAndSet(AsyncState.DISPATCHING, AsyncState.DISPATCHED)) { if (this.dispatch!=null) { try { @@ -264,8 +276,8 @@ }catch (Exception x) { log.error("",x); } - request.coyoteRequest.action(ActionCode.ACTION_ASYNC_COMPLETE,null); recycle(); + } else { throw new IllegalStateException("Complete illegal. Invalid state:"+state.get()); } 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=801414&r1=801413&r2=801414&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Wed Aug 5 21:16:47 2009 @@ -22,6 +22,7 @@ import java.net.InetAddress; import java.nio.channels.SelectionKey; import java.util.StringTokenizer; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; @@ -1314,10 +1315,13 @@ async = true; } else if (actionCode == ActionCode.ACTION_ASYNC_COMPLETE) { //TODO SERVLET3 - async + AtomicBoolean dispatch = (AtomicBoolean)param; asyncClose = true; RequestInfo rp = request.getRequestProcessor(); - if ( rp.getStage() != org.apache.coyote.Constants.STAGE_SERVICE ) //async handling - socket.getPoller().cometInterest(socket); + if ( rp.getStage() != org.apache.coyote.Constants.STAGE_SERVICE ) { //async handling + dispatch.set(true); + endpoint.processSocket(this.socket, SocketStatus.STOP, true); + } } else if (actionCode == ActionCode.ACTION_ASYNC_SETTIMEOUT) { //TODO SERVLET3 - async if (param==null) return; --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org For additional commands, e-mail: dev-help@tomcat.apache.org