Allow writing with void promise if IdleStateHandler is configured in pipeline.

Motivation:

Allow writing with void promise if IdleStateHandler is configured in the pipeline for read timeout events.

Modifications:

Better performance.

Result:

No more ChannelFutureListeners are created if IdleStateHandler is only configured for read timeouts allowing for writing to the channel with void promise.
This commit is contained in:
johnou 2015-05-25 19:16:18 +02:00 committed by Norman Maurer
parent 6703318010
commit 0decf2f647

View File

@ -256,13 +256,16 @@ public class IdleStateHandler extends ChannelDuplexHandler {
@Override @Override
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
promise.addListener(new ChannelFutureListener() { // Allow writing with void promise if handler is only configured for read timeout events.
@Override if (writerIdleTimeNanos > 0 || allIdleTimeNanos > 0) {
public void operationComplete(ChannelFuture future) throws Exception { promise.addListener(new ChannelFutureListener() {
lastWriteTime = System.nanoTime(); @Override
firstWriterIdleEvent = firstAllIdleEvent = true; public void operationComplete(ChannelFuture future) throws Exception {
} lastWriteTime = System.nanoTime();
}); firstWriterIdleEvent = firstAllIdleEvent = true;
}
});
}
ctx.write(msg, promise); ctx.write(msg, promise);
} }