You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by el...@apache.org on 2014/09/26 12:09:22 UTC

git commit: Fixed the IoBuffer.shrink() methd, which was looping when the minimal capacity was set to 0.

Repository: mina
Updated Branches:
  refs/heads/2.0 c915d1f6f -> 80af8c368


Fixed the IoBuffer.shrink() methd, which was looping when the minimal
capacity was set to 0.

Project: http://git-wip-us.apache.org/repos/asf/mina/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina/commit/80af8c36
Tree: http://git-wip-us.apache.org/repos/asf/mina/tree/80af8c36
Diff: http://git-wip-us.apache.org/repos/asf/mina/diff/80af8c36

Branch: refs/heads/2.0
Commit: 80af8c36890f7a25beb35fe01c2b62650414cf0e
Parents: c915d1f
Author: Emmanuel Lécharny <el...@symas.com>
Authored: Fri Sep 26 12:08:56 2014 +0200
Committer: Emmanuel Lécharny <el...@symas.com>
Committed: Fri Sep 26 12:08:56 2014 +0200

----------------------------------------------------------------------
 .../mina/core/buffer/AbstractIoBuffer.java       |  7 +++++++
 .../apache/mina/core/buffer/IoBufferTest.java    | 19 +++++++++++++++++++
 2 files changed, 26 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina/blob/80af8c36/mina-core/src/main/java/org/apache/mina/core/buffer/AbstractIoBuffer.java
----------------------------------------------------------------------
diff --git a/mina-core/src/main/java/org/apache/mina/core/buffer/AbstractIoBuffer.java b/mina-core/src/main/java/org/apache/mina/core/buffer/AbstractIoBuffer.java
index 45449db..f88db05 100644
--- a/mina-core/src/main/java/org/apache/mina/core/buffer/AbstractIoBuffer.java
+++ b/mina-core/src/main/java/org/apache/mina/core/buffer/AbstractIoBuffer.java
@@ -304,17 +304,24 @@ public abstract class AbstractIoBuffer extends IoBuffer {
         int position = position();
         int capacity = capacity();
         int limit = limit();
+
         if (capacity == limit) {
             return this;
         }
 
         int newCapacity = capacity;
         int minCapacity = Math.max(minimumCapacity, limit);
+
         for (;;) {
             if (newCapacity >>> 1 < minCapacity) {
                 break;
             }
+
             newCapacity >>>= 1;
+
+            if (minCapacity == 0) {
+                break;
+            }
         }
 
         newCapacity = Math.max(minCapacity, newCapacity);

http://git-wip-us.apache.org/repos/asf/mina/blob/80af8c36/mina-core/src/test/java/org/apache/mina/core/buffer/IoBufferTest.java
----------------------------------------------------------------------
diff --git a/mina-core/src/test/java/org/apache/mina/core/buffer/IoBufferTest.java b/mina-core/src/test/java/org/apache/mina/core/buffer/IoBufferTest.java
index 4d23a7e..4e85dab 100644
--- a/mina-core/src/test/java/org/apache/mina/core/buffer/IoBufferTest.java
+++ b/mina-core/src/test/java/org/apache/mina/core/buffer/IoBufferTest.java
@@ -1449,4 +1449,23 @@ public class IoBufferTest {
         assertEquals(0x02, res.get());
         assertEquals(0x03, res.get());
     }
+
+    @Test
+    public void testShrink() {
+        IoBuffer buf = IoBuffer.allocate(36);
+        buf.minimumCapacity(0);
+
+        buf.limit(18);
+        buf.shrink();
+        buf.limit(9);
+        buf.shrink();
+        buf.limit(4);
+        buf.shrink();
+        buf.limit(2);
+        buf.shrink();
+        buf.limit(1);
+        buf.shrink();
+        buf.limit(0);
+        buf.shrink();
+    }
 }