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 <[email protected]> Authored: Fri Sep 26 12:08:56 2014 +0200 Committer: Emmanuel Lécharny <[email protected]> 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(); + } }
