You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/11/11 15:46:03 UTC

svn commit: r593896 - /mina/trunk/core/src/main/java/org/apache/mina/filter/traffic/ReadThrottleFilter.java

Author: trustin
Date: Sun Nov 11 06:46:02 2007
New Revision: 593896

URL: http://svn.apache.org/viewvc?rev=593896&view=rev
Log:
Related issue: DIRMINA-473 (ReadThrottleFilter throws IllegalStateException)
* Reverted the previous change partially - the counter is reset when it goes negative.

Modified:
    mina/trunk/core/src/main/java/org/apache/mina/filter/traffic/ReadThrottleFilter.java

Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/traffic/ReadThrottleFilter.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/traffic/ReadThrottleFilter.java?rev=593896&r1=593895&r2=593896&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/traffic/ReadThrottleFilter.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/traffic/ReadThrottleFilter.java Sun Nov 11 06:46:02 2007
@@ -100,6 +100,10 @@
         return serviceBufferSize.addAndGet(increment);
     }
     
+    private static void resetServiceBufferSize(IoService service) {
+        serviceBufferSizes.remove(service);
+    }
+    
     private final AttributeKey STATE =
         new AttributeKey(ReadThrottleFilter.class, "state");
 
@@ -426,7 +430,14 @@
         Logger logger = IoSessionLogger.getLogger(session, getClass());
 
         int globalBufferSize = ReadThrottleFilter.globalBufferSize.addAndGet(-size);
+        if (globalBufferSize < 0) {
+            ReadThrottleFilter.globalBufferSize.set(0);
+        }
+        
         int serviceBufferSize = increaseServiceBufferSize(session.getService(), -size);
+        if (serviceBufferSize < 0) {
+            resetServiceBufferSize(session.getService());
+        }
 
         int maxGlobalBufferSize = this.maxGlobalBufferSize;
         int maxServiceBufferSize = this.maxServiceBufferSize;
@@ -437,6 +448,9 @@
         boolean enforcePolicy = false;
         synchronized (state) {
             sessionBufferSize = (state.sessionBufferSize -= size);
+            if (sessionBufferSize < 0) {
+                state.sessionBufferSize = sessionBufferSize = 0;
+            }
             if ((maxGlobalBufferSize == 0 || globalBufferSize < maxGlobalBufferSize) &&
                 (maxServiceBufferSize == 0 || serviceBufferSize < maxServiceBufferSize) &&
                 (maxSessionBufferSize == 0 || sessionBufferSize < maxSessionBufferSize)) {