Clear selectedKeys in OioSctpChannel.doReadMessages
Motivation: The fix for https://github.com/netty/netty/issues/3884 breaks SctpEchoTest because Selector.select will always return 0 if you do not clear last selectedKeys. Modifications: Clear readSelector.selectedKeys() if it is not empty. Result: SctpEchoTest is green again.
This commit is contained in:
parent
eca67ee972
commit
b147fa6879
@ -185,10 +185,18 @@ public class OioSctpChannel extends AbstractOioMessageChannel
|
|||||||
return readMessages;
|
return readMessages;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We must clear the selectedKeys because the Selector will never do it. If we do not clear it, the selectionKey
|
||||||
|
// will always be returned even if there is no data can be read which causes performance issue. And in some
|
||||||
|
// implementation of Selector, the select method may return 0 if the selectionKey which is ready for process has
|
||||||
|
// already been in the selectedKeys and cause the keysSelected above to be false even if we actually have
|
||||||
|
// something to read.
|
||||||
|
readSelector.selectedKeys().clear();
|
||||||
|
|
||||||
RecvByteBufAllocator.Handle allocHandle = this.allocHandle;
|
RecvByteBufAllocator.Handle allocHandle = this.allocHandle;
|
||||||
if (allocHandle == null) {
|
if (allocHandle == null) {
|
||||||
this.allocHandle = allocHandle = config().getRecvByteBufAllocator().newHandle();
|
this.allocHandle = allocHandle = config().getRecvByteBufAllocator().newHandle();
|
||||||
}
|
}
|
||||||
|
|
||||||
ByteBuf buffer = allocHandle.allocate(config().getAllocator());
|
ByteBuf buffer = allocHandle.allocate(config().getAllocator());
|
||||||
boolean free = true;
|
boolean free = true;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user