You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2015/05/21 17:45:02 UTC

svn commit: r1680914 - in /tomcat/trunk/java/org/apache/coyote/http2: AbstractStream.java Stream.java

Author: markt
Date: Thu May 21 15:45:01 2015
New Revision: 1680914

URL: http://svn.apache.org/r1680914
Log:
Thread safety for windowSize

Modified:
    tomcat/trunk/java/org/apache/coyote/http2/AbstractStream.java
    tomcat/trunk/java/org/apache/coyote/http2/Stream.java

Modified: tomcat/trunk/java/org/apache/coyote/http2/AbstractStream.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/AbstractStream.java?rev=1680914&r1=1680913&r2=1680914&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/AbstractStream.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/AbstractStream.java Thu May 21 15:45:01 2015
@@ -19,6 +19,7 @@ package org.apache.coyote.http2;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.juli.logging.Log;
 import org.apache.tomcat.util.res.StringManager;
@@ -35,7 +36,7 @@ abstract class AbstractStream {
     private volatile AbstractStream parentStream = null;
     private final Set<AbstractStream> childStreams = new HashSet<>();
     private volatile int weight = Constants.DEFAULT_WEIGHT;
-    private volatile long windowSize = ConnectionSettings.DEFAULT_WINDOW_SIZE;
+    private AtomicLong windowSize = new AtomicLong(ConnectionSettings.DEFAULT_WINDOW_SIZE);
 
     public Integer getIdentifier() {
         return identifier;
@@ -123,25 +124,22 @@ abstract class AbstractStream {
 
 
     protected void setWindowSize(long windowSize) {
-        this.windowSize = windowSize;
+        this.windowSize.set(windowSize);
     }
 
 
     protected long getWindowSize() {
-        return windowSize;
+        return windowSize.get();
     }
 
 
     protected void incrementWindowSize(int increment) {
-        windowSize += increment;
+        windowSize.addAndGet(increment);
     }
 
 
-    protected void decrementWindowSize(int decrement) {
-        windowSize += decrement;
-    }
-
     protected int reserveWindowSize(int reservation) {
+        long windowSize = this.windowSize.get();
         if (reservation > windowSize) {
             return (int) windowSize;
         } else {

Modified: tomcat/trunk/java/org/apache/coyote/http2/Stream.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Stream.java?rev=1680914&r1=1680913&r2=1680914&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Stream.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Stream.java Thu May 21 15:45:01 2015
@@ -221,8 +221,8 @@ public class Stream extends AbstractStre
                     }
                 } while (thisWrite < 1);
 
-                decrementWindowSize(thisWrite);
-                handler.decrementWindowSize(thisWrite);
+                incrementWindowSize(-thisWrite);
+                handler.incrementWindowSize(-thisWrite);
 
                 // Do the write
                 handler.writeBody(Stream.this, buffer, thisWrite);



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