netty5/transport/src/main/java/io/netty/channel
Scott Mitchell ed0668384b NIO read spin event loop spin when half closed (#7801)
Motivation:
AbstractNioByteChannel will detect that the remote end of the socket has
been closed and propagate a user event through the pipeline. However if
the user has auto read on, or calls read again, we may propagate the
same user events again. If the underlying transport continuously
notifies us that there is read activity this will happen in a spin loop
which consumes unnecessary CPU.

Modifications:
- AbstractNioByteChannel's unsafe read() should check if the input side
of the socket has been shutdown before processing the event. This is
consistent with EPOLL and KQUEUE transports.
- add unit test with @normanmaurer's help, and make transports consistent with respect to user events

Result:
No more read spin loop in NIO when the channel is half closed.
2018-03-28 20:02:57 +02:00
..
embedded Add a hint of ownership transfer when calling EmbeddedChannel.read*() methods. 2017-12-20 07:44:25 +01:00
group Simplify DefaultChannelGroup.contains(...) and so remove one instanceof check. 2018-03-17 09:45:24 +01:00
internal Enforce writeSpinCount to limit resource consumption per socket (#7478) 2017-12-07 16:00:52 -08:00
local FIX: force a read operation for peer instead of self (#7454) 2017-12-07 17:05:57 -08:00
nio NIO read spin event loop spin when half closed (#7801) 2018-03-28 20:02:57 +02:00
oio NIO read spin event loop spin when half closed (#7801) 2018-03-28 20:02:57 +02:00
pool Improved error message in FixedChannelPool 2017-11-13 20:29:07 +01:00
socket Correctly handle non IOException during read in NioServerSocketChannel 2018-03-25 17:31:59 +02:00
AbstractChannel.java Fix assertion error when closing / shutdown native channel and SO_LINGER is set. 2017-09-18 14:46:37 -07:00
AbstractChannelHandlerContext.java Finish work on http2 child channel implementation and http2 frame api. 2017-08-11 12:41:28 +02:00
AbstractCoalescingBufferQueue.java SslHandler aggregation prefer copy over CompositeByteBuf 2017-12-04 11:02:33 -08:00
AbstractEventLoop.java Implement EventExecutor.parent() in AbstractEventExecutor 2014-03-24 11:05:51 +09:00
AbstractEventLoopGroup.java Add EventExecutor.children() in favor of iterator() 2014-03-24 12:32:55 +09:00
AbstractServerChannel.java Fix assertion error when closing / shutdown native channel and SO_LINGER is set. 2017-09-18 14:46:37 -07:00
AdaptiveRecvByteBufAllocator.java DefaultMaxMessagesRecvByteBufAllocator support an option to ignore maybeMoreData 2017-12-04 11:03:58 -08:00
AddressedEnvelope.java Enable a user specify an arbitrary information with ReferenceCounted.touch() 2014-02-13 18:16:25 -08:00
Channel.java Typo error: Method invoker() no longer exists 2017-01-19 12:16:31 +01:00
ChannelConfig.java fix the typos 2017-04-20 04:56:09 +02:00
ChannelDuplexHandler.java Rename future to promise in the ChannelDuplexHandler method arguments. 2016-07-06 08:55:29 +02:00
ChannelException.java Remove apiviz tags - we are focusing on user guide instead and putting diagrams there 2013-02-14 12:09:16 -08:00
ChannelFactory.java Name resolver API and DNS-based name resolver 2014-10-16 17:05:20 +09:00
ChannelFlushPromiseNotifier.java Fix typos in docs. 2018-02-14 08:44:07 +01:00
ChannelFuture.java trivial javadoc fixes 2016-03-16 20:18:29 +01:00
ChannelFutureListener.java Replace TransferFuture(Listener) with (Channel)ProgressiveFuture(Listener) 2013-04-15 15:26:20 +09:00
ChannelHandler.java Mark ChannelHandler.exceptionCaught(...) as deprected. 2015-11-23 09:59:22 +01:00
ChannelHandlerAdapter.java Ensure CombinedChannelDuplexHandler can not be shared. 2017-02-14 08:42:23 +01:00
ChannelHandlerContext.java Rename ChannelHandlerContext#fireUserEventTriggered() argument from event to evt so it matches the ChannelInboundHandler#userEventTriggered() argument's name. 2016-07-07 17:01:19 +02:00
ChannelId.java fix the typos 2017-04-20 04:56:09 +02:00
ChannelInboundHandler.java Add @Deprecated when the javadoc says its deprecated 2016-05-01 20:30:13 +02:00
ChannelInboundHandlerAdapter.java Mark ChannelHandler.exceptionCaught(...) as deprecated in preparation to move to ChannelInboundHandler. Related to [#1808] 2013-09-08 20:11:51 +02:00
ChannelInboundInvoker.java Add ChannelInboundInvoker and ChannelOutboundInvoker 2016-05-14 20:41:13 +02:00
ChannelInitializer.java fix the typos 2017-04-20 04:56:09 +02:00
ChannelMetadata.java Allow to change if EmbeddedChannel should handle close() and disconnect() different. 2016-01-14 07:19:23 +01:00
ChannelOption.java Remove reference to 5.0 release. 2016-08-23 09:46:57 +02:00
ChannelOutboundBuffer.java Enforce writeSpinCount to limit resource consumption per socket (#7478) 2017-12-07 16:00:52 -08:00
ChannelOutboundHandler.java fix the typos 2017-04-20 04:56:09 +02:00
ChannelOutboundHandlerAdapter.java Fix ChannelOutboundHandlerAdapter javadoc 2016-01-26 10:13:16 +01:00
ChannelOutboundInvoker.java Add ChannelInboundInvoker and ChannelOutboundInvoker 2016-05-14 20:41:13 +02:00
ChannelPipeline.java fix the typos 2017-04-20 04:56:09 +02:00
ChannelPipelineException.java Remove apiviz tags - we are focusing on user guide instead and putting diagrams there 2013-02-14 12:09:16 -08:00
ChannelProgressiveFuture.java Make EventExecutor.shutdownGracefully() return Future 2013-06-12 08:00:54 +09:00
ChannelProgressiveFutureListener.java Replace TransferFuture(Listener) with (Channel)ProgressiveFuture(Listener) 2013-04-15 15:26:20 +09:00
ChannelProgressivePromise.java [#2618] Introduce ChannelPromise.unvoid() and ChannelFuture.isVoid() 2014-07-03 14:17:12 +02:00
ChannelPromise.java [#2618] Introduce ChannelPromise.unvoid() and ChannelFuture.isVoid() 2014-07-03 14:17:12 +02:00
ChannelPromiseAggregator.java Deprecate PromiseAggregator 2016-03-14 10:53:30 -07:00
ChannelPromiseNotifier.java [#5598] Ensure SslHandler not log false-positives when try to close the channel due timeout. 2016-07-30 21:15:09 +02:00
CoalescingBufferQueue.java HTTP/2 write of released buffer should not write and should fail the promise 2017-11-06 14:38:58 -08:00
CombinedChannelDuplexHandler.java Cleanup: replaced deprecated ctx.attr() and ctx.hasAttr() methods usage with ch.attr() and ch.hasAttr(). 2018-01-18 15:00:41 +00:00
CompleteChannelFuture.java [#2618] Introduce ChannelPromise.unvoid() and ChannelFuture.isVoid() 2014-07-03 14:17:12 +02:00
ConnectTimeoutException.java [#1036] Add special ConnectTimeoutException which is thrown if a connection failed because of a timeout 2013-03-07 20:53:45 +01:00
DefaultAddressedEnvelope.java Revamp DNS codec 2015-05-01 11:33:16 +09:00
DefaultChannelConfig.java Enforce writeSpinCount to limit resource consumption per socket (#7478) 2017-12-07 16:00:52 -08:00
DefaultChannelHandlerContext.java Remove ChannelHandlerInvoker 2016-05-17 11:14:00 +02:00
DefaultChannelId.java Optimize DefaultChannelId.equals 2017-09-08 10:36:48 +02:00
DefaultChannelPipeline.java Add removeIfExists() method to DefaultChannelPipeline 2018-03-27 09:48:52 +02:00
DefaultChannelProgressivePromise.java [#2618] Introduce ChannelPromise.unvoid() and ChannelFuture.isVoid() 2014-07-03 14:17:12 +02:00
DefaultChannelPromise.java Fail fast when DefaultChannelPromise is constructed with null as Channel. 2018-01-18 18:57:42 +00:00
DefaultEventLoop.java Replace LocalEventLoopGroup with DefaultEventLoopGroup 2014-03-24 11:39:55 +09:00
DefaultEventLoopGroup.java [#5763] DefaultEventLoopGroup doesn't expose ctor variant that accepts custom Executor 2016-09-01 08:20:05 +02:00
DefaultFileRegion.java Fix typo missed in f46cfbc590 2016-04-05 15:32:54 +02:00
DefaultMaxBytesRecvByteBufAllocator.java Make methods 'static' where it missed 2017-02-23 11:01:57 +01:00
DefaultMaxMessagesRecvByteBufAllocator.java DefaultMaxMessagesRecvByteBufAllocator support an option to ignore maybeMoreData 2017-12-04 11:03:58 -08:00
DefaultMessageSizeEstimator.java [#4363] Improve size calculation of messages when written from outside the EventLoop 2015-10-28 21:54:31 +01:00
DefaultSelectStrategy.java EPOLL SelectStrategy 2016-03-30 15:11:35 -07:00
DefaultSelectStrategyFactory.java EPOLL SelectStrategy 2016-03-30 15:11:35 -07:00
DelegatingChannelPromiseNotifier.java Not log notify failure for DelegatingChannelPromiseNotifier when promise is VoidChannelPromise 2017-09-07 08:58:39 +02:00
EventLoop.java [#5486] Not operate on serial execution assumption when using EventExecutor in the DefaultChannelPipeline. 2016-07-07 15:01:56 +02:00
EventLoopException.java Fix types in javadocs 2013-07-22 19:14:36 +02:00
EventLoopGroup.java Add a EventLoopGroup.register(ChannelPromise) 2016-05-21 18:40:17 +02:00
FailedChannelFuture.java Fix most inspector warnings 2014-07-02 19:55:07 +09:00
FileRegion.java Motivation: 2017-03-06 14:43:52 -08:00
FixedRecvByteBufAllocator.java DefaultMaxMessagesRecvByteBufAllocator support an option to ignore maybeMoreData 2017-12-04 11:03:58 -08:00
MaxBytesRecvByteBufAllocator.java Fix errors reported by javadoc 2015-12-27 08:36:45 +01:00
MaxMessagesRecvByteBufAllocator.java maxBytesPerRead channel configuration 2015-08-05 23:59:54 -07:00
MessageSizeEstimator.java Correctly update Channel.isWritable() when the write happens from outside the EventLoop in a fast fashion. Fixes [#1697] 2013-08-07 10:10:43 +02:00
MultithreadEventLoopGroup.java Enable configuring available processors 2017-04-23 10:31:17 +02:00
package-info.java Remove apiviz tags - we are focusing on user guide instead and putting diagrams there 2013-02-14 12:09:16 -08:00
PendingBytesTracker.java Correctly update Channel writability when queueing data in SslHandler. 2017-10-24 09:13:15 +02:00
PendingWriteQueue.java PendingWriteQueue to handle write operations with void future 2018-03-16 08:23:40 +01:00
PreferHeapByteBufAllocator.java We should prefer heap buffers when using the OIO transport to reduce memory copies. 2017-08-11 08:48:04 +02:00
RecvByteBufAllocator.java Fix javadoc issues 2017-02-22 07:31:07 +01:00
ReflectiveChannelFactory.java Use Constructor for reflective class instantiation. 2017-08-18 09:42:36 +02:00
SelectStrategy.java Allow to customize NIO (channel) select strategies. 2016-03-30 15:01:25 -07:00
SelectStrategyFactory.java Allow to customize NIO (channel) select strategies. 2016-03-30 15:01:25 -07:00
ServerChannel.java Revert file mode 2012-07-07 14:39:35 +09:00
SimpleChannelInboundHandler.java Fix javadoc issues 2017-02-22 07:31:07 +01:00
SingleThreadEventLoop.java Ability to run a task at the end of an eventloop iteration. 2016-07-12 10:22:15 +02:00
SucceededChannelFuture.java Fix most inspector warnings 2014-07-02 19:55:07 +09:00
ThreadPerChannelEventLoop.java Add a EventLoopGroup.register(ChannelPromise) 2016-05-21 18:40:17 +02:00
ThreadPerChannelEventLoopGroup.java Set some StackTraceElement on pre-instantiated static exceptions 2016-06-20 11:33:05 +02:00
VoidChannelPromise.java Add java-doc for implemented methods of io.netty.util.concurrent.Future#cancel(boolean mayInterruptIfRunning) 2018-01-29 11:19:52 +01:00
WriteBufferWaterMark.java fix one java doc issue: extra } 2016-04-08 09:47:26 +02:00