summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-10-17 16:17:26 +0200
committerGitHub <noreply@github.com>2019-10-17 16:17:26 +0200
commit3a69fa445420a96eb305b2a1a9e7372ff88acaa3 (patch)
tree7c930c2a09453eef8881148c4e23fa9ae7884884
parentf966b8ff891e835972866865453dc54d5c2a858a (diff)
parentfc1dddf322951e8b7d832f4ad7c0cb8e0ab408da (diff)
Merge pull request #11007 from vespa-engine/havardpe/auto-compact-empty-buffers
auto-compact empty buffers when requesting writable view
-rw-r--r--jrt/src/com/yahoo/jrt/Buffer.java4
-rw-r--r--jrt/tests/com/yahoo/jrt/BufferTest.java15
2 files changed, 19 insertions, 0 deletions
diff --git a/jrt/src/com/yahoo/jrt/Buffer.java b/jrt/src/com/yahoo/jrt/Buffer.java
index e57eda3473f..937666a28ae 100644
--- a/jrt/src/com/yahoo/jrt/Buffer.java
+++ b/jrt/src/com/yahoo/jrt/Buffer.java
@@ -32,6 +32,10 @@ class Buffer {
}
readPos = buf.position();
buf.limit(buf.capacity());
+ if (readPos == writePos) {
+ readPos = 0;
+ writePos = 0;
+ }
buf.position(writePos);
readMode = false;
}
diff --git a/jrt/tests/com/yahoo/jrt/BufferTest.java b/jrt/tests/com/yahoo/jrt/BufferTest.java
index f837b036957..7f3145365d9 100644
--- a/jrt/tests/com/yahoo/jrt/BufferTest.java
+++ b/jrt/tests/com/yahoo/jrt/BufferTest.java
@@ -11,6 +11,21 @@ import static org.junit.Assert.assertTrue;
public class BufferTest {
@org.junit.Test
+ public void testEmptyBufferAutoCompact() {
+ Buffer buf = new Buffer(1024);
+ ByteBuffer b = buf.getWritable(10);
+ for (int x = 0; x < 10; x++) {
+ b.put((byte)x);
+ }
+ b = buf.getReadable();
+ while (b.remaining() > 0) {
+ b.get();
+ }
+ b = buf.getWritable(10);
+ assertEquals(1024, b.remaining());
+ }
+
+ @org.junit.Test
public void testBuffer() {
int size = Buffer.MAX_IO + (Buffer.MAX_IO / 10);