Recycle RecyclableArrayDeque as fast as possible in FlowControlHandler (#9263)

Motivation:

FlowControlHandler does use a recyclable ArrayDeque internally but only recycles it when the channel is closed. We should better recycle it once it is empty.

Modifications:

Recycle the deque as fast as possible

Result:

Less RecyclableArrayDeque instances.
This commit is contained in:
Norman Maurer 2019-06-22 07:27:04 +02:00
parent 99034a15b5
commit 9b37be9550

View File

@ -87,7 +87,7 @@ public class FlowControlHandler implements ChannelHandler {
* testing, debugging and inspection purposes and it is not Thread safe!
*/
boolean isQueueEmpty() {
return queue.isEmpty();
return queue == null || queue.isEmpty();
}
/**
@ -189,8 +189,13 @@ public class FlowControlHandler implements ChannelHandler {
// We're firing a completion event every time one (or more)
// messages were consumed and the queue ended up being drained
// to an empty state.
if (queue.isEmpty() && consumed > 0) {
ctx.fireChannelReadComplete();
if (queue.isEmpty()) {
queue.recycle();
queue = null;
if (consumed > 0) {
ctx.fireChannelReadComplete();
}
}
return consumed;