On 18/02/2015 12:14, ma...@apache.org wrote:
> Author: markt
> Date: Wed Feb 18 12:14:24 2015
> New Revision: 1660609
> 
> URL: http://svn.apache.org/r1660609
> Log:
> registered is guarded by registeredLock so there is no need for it to be 
> volatile.
> Simplify the process of triggering the first call to onWritePossible

Hmm. I've been running a test with this plus a bunch of possibly
unnecessary sync expansions looping over the suspect test for over an
hour now without any failures.

This patch does fix a logic problem but I thought it was one that would
result in multiple write registrations rather than a missed registration.

I'm going to look at this more closely until either I convince myself
that this change could fix the 'missed write registration' problem or
one of the tests fails.

Mark


> 
> Modified:
>     tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessor.java
>     
> tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java
> 
> Modified: 
> tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessor.java
> URL: 
> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessor.java?rev=1660609&r1=1660608&r2=1660609&view=diff
> ==============================================================================
> --- tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessor.java 
> (original)
> +++ tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessor.java 
> Wed Feb 18 12:14:24 2015
> @@ -99,7 +99,6 @@ public class UpgradeProcessor implements
>      public final SocketState upgradeDispatch(SocketStatus status) {
>          if (status == SocketStatus.OPEN_READ) {
>              upgradeServletInputStream.onDataAvailable();
> -            upgradeServletOutputStream.checkWriteDispatch();
>          } else if (status == SocketStatus.OPEN_WRITE) {
>              upgradeServletOutputStream.onWritePossible();
>          } else if (status == SocketStatus.STOP) {
> 
> Modified: 
> tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java
> URL: 
> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java?rev=1660609&r1=1660608&r2=1660609&view=diff
> ==============================================================================
> --- 
> tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java
>  (original)
> +++ 
> tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java
>  Wed Feb 18 12:14:24 2015
> @@ -55,12 +55,7 @@ public class UpgradeServletOutputStream
>      private volatile WriteListener listener = null;
>  
>      // Guarded by registeredLock
> -    private volatile boolean registered = false;
> -
> -    // Use to track if a dispatch needs to be arranged to trigger the first 
> call
> -    // to onWritePossible. If the socket gets registered for write while 
> this is
> -    // set then this will be ignored.
> -    private volatile boolean writeDispatchRequired = false;
> +    private boolean registered = false;
>  
>      private volatile ClassLoader applicationLoader = null;
>  
> @@ -110,7 +105,10 @@ public class UpgradeServletOutputStream
>          }
>          // Container is responsible for first call to onWritePossible() but 
> only
>          // need to do this if setting the listener for the first time.
> -        writeDispatchRequired = true;
> +        synchronized (registeredLock) {
> +            registered = true;
> +            socketWrapper.addDispatch(DispatchType.NON_BLOCKING_WRITE);
> +        }
>  
>          this.listener = listener;
>          this.applicationLoader = 
> Thread.currentThread().getContextClassLoader();
> @@ -265,16 +263,4 @@ public class UpgradeServletOutputStream
>              }
>          }
>      }
> -
> -
> -    void checkWriteDispatch() {
> -        synchronized (registeredLock) {
> -            if (writeDispatchRequired) {
> -                writeDispatchRequired = false;
> -                if (!registered) {
> -                    
> socketWrapper.addDispatch(DispatchType.NON_BLOCKING_WRITE);
> -                }
> -            }
> -        }
> -    }
>  }
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: dev-h...@tomcat.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to