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:
parent
430eeee2f6
commit
2c99fc0f12
@ -88,7 +88,7 @@ public class FlowControlHandler extends ChannelDuplexHandler {
|
||||
* testing, debugging and inspection purposes and it is not Thread safe!
|
||||
*/
|
||||
boolean isQueueEmpty() {
|
||||
return queue.isEmpty();
|
||||
return queue == null || queue.isEmpty();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -190,9 +190,14 @@ public class FlowControlHandler extends ChannelDuplexHandler {
|
||||
// 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) {
|
||||
if (queue.isEmpty()) {
|
||||
queue.recycle();
|
||||
queue = null;
|
||||
|
||||
if (consumed > 0) {
|
||||
ctx.fireChannelReadComplete();
|
||||
}
|
||||
}
|
||||
|
||||
return consumed;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user