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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org