483878 - Parallel requests stuck via the http client transport over HTTP/2.

Fixed by recycling correctly the blockBuffer.
This commit is contained in:
Simone Bordet 2015-12-09 11:56:26 +01:00
parent c5e56e72e6
commit 35da4a3c54
2 changed files with 43 additions and 32 deletions

View File

@ -75,7 +75,12 @@ public class HeaderBlockParser
MetaData result = hpackDecoder.decode(toDecode);
buffer.limit(limit);
if (blockBuffer != null)
{
byteBufferPool.release(blockBuffer);
blockBuffer = null;
}
return result;
}

View File

@ -114,6 +114,9 @@ public class HeadersGenerateParseTest
}
}, 4096, 8192);
// Iterate a few times to be sure generator and parser are properly reset.
for (int i = 0; i < 2; ++i)
{
int streamId = 13;
HttpFields fields = new HttpFields();
fields.put("Accept", "text/html");
@ -124,8 +127,10 @@ public class HeadersGenerateParseTest
PriorityFrame priorityFrame = new PriorityFrame(streamId, 3 * streamId, 200, true);
generator.generateHeaders(lease, streamId, metaData, priorityFrame, true);
frames.clear();
for (ByteBuffer buffer : lease.getByteBuffers())
{
buffer = buffer.slice();
while (buffer.hasRemaining())
{
parser.parse(ByteBuffer.wrap(new byte[]{buffer.get()}));
@ -152,3 +157,4 @@ public class HeadersGenerateParseTest
Assert.assertEquals(priorityFrame.isExclusive(), priority.isExclusive());
}
}
}