netty5/transport-native-epoll/src/test/java/io/netty/channel/epoll
Julien Viet e348bd9217 KQueueEventLoop | EpollEventLoop may incorrectly update registration when FD is reused.
Motivation:

The current KQueueEventLoop implementation does not process concurrent domain socket channel registration/unregistration in the order they actual
happen since unregistration are delated by an event loop task scheduling. When a domain socket is closed, it's file descriptor might be reused
quickly and therefore trigger a new channel registration using the same descriptor.

Consequently the KQueueEventLoop#add(AbstractKQueueChannel) method will overwrite the current inactive channels having the same descriptor
and the delayed KQueueEventLoop#remove(AbstractKQueueChannel) will remove the active channel that replaced the inactive one.

As active channels are registered, events for this file descriptor won't be processed anymore and the channels will never be closed.

The same problem can also happen in EpollEventLoop. Beside this we also may never remove the AbstractEpollChannel from the internal map
when it is unregistered which will prevent it from be GC'ed

Modifications:

- Change logic of native KQueue and Epoll implementations to ensure we correctly handle the case of FD reuse
- Only try to update kevent / epoll if the Channel is still open (as otherwise it will be handled by kqueue / epoll itself)
- Correctly remove AbstractEpollChannel from internal map in all cases
- Make implementation of closeAll() consistent for Epoll and KQueueEventLoop

Result:

KQueue and Epoll native transports correctly handle FD reuse

Co-authored-by: Norman Maurer <norman_maurer@apple.com>
2019-05-22 09:23:09 +02:00
..
EpollAbstractDomainSocketEchoTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
EpollChannelConfigTest.java Use ChannelException when ChannelConfig operation fails in epoll. 2015-08-28 21:38:35 +02:00
EpollCompositeBufferGatheringWriteTest.java IovArray#add return value resulted in more ByteBufs being added during iteration 2018-01-04 08:04:32 -08:00
EpollDatagramChannelConfigTest.java Allowed IP_FREEBIND option for UDP epoll (#8728) 2019-01-21 07:42:05 +01:00
EpollDatagramConnectNotExistsTest.java Correctly handle connect/disconnect in EpollDatagramChannel / KQueueDatagramChannel 2017-08-04 09:22:53 +02:00
EpollDatagramUnicastTest.java Add IPv6 multicast test to testsuite (#9037) 2019-04-12 12:29:08 +02:00
EpollDetectPeerCloseWithoutReadTest.java KQueue detect peer close without EVFILT_READ 2017-08-18 11:00:18 -07:00
EpollDomainSocketDataReadInitialStateTest.java Epoll and Kqueue shouldn't read by default (#8024) 2018-06-15 10:28:50 +02:00
EpollDomainSocketEchoTest.java Add support for Unix Domain Sockets when using native epoll transport 2015-02-04 15:39:41 +01:00
EpollDomainSocketFdTest.java Update tests to not use TestUtils.getFreePort() and so ensure we not try to use a port that is used by the system in the meantime. 2017-07-20 08:25:37 +02:00
EpollDomainSocketFileRegionTest.java Add support for Unix Domain Sockets when using native epoll transport 2015-02-04 15:39:41 +01:00
EpollDomainSocketFixedLengthEchoTest.java Add support for Unix Domain Sockets when using native epoll transport 2015-02-04 15:39:41 +01:00
EpollDomainSocketGatheringWriteTest.java Add support for Unix Domain Sockets when using native epoll transport 2015-02-04 15:39:41 +01:00
EpollDomainSocketObjectEchoTest.java Add support for Unix Domain Sockets when using native epoll transport 2015-02-04 15:39:41 +01:00
EpollDomainSocketReuseFdTest.java KQueueEventLoop | EpollEventLoop may incorrectly update registration when FD is reused. 2019-05-22 09:23:09 +02:00
EpollDomainSocketShutdownOutputByPeerTest.java Support ALLOW_HALF_CLOSURE channel option on Unix domain socket. (#8932) 2019-03-19 11:24:07 +01:00
EpollDomainSocketSslClientRenegotiateTest.java Support using an Executor to offload blocking / long-running tasks wh… (#8847) 2019-02-11 09:47:44 +01:00
EpollDomainSocketSslEchoTest.java Add support for Unix Domain Sockets when using native epoll transport 2015-02-04 15:39:41 +01:00
EpollDomainSocketSslGreetingTest.java Support using an Executor to offload blocking / long-running tasks wh… (#8847) 2019-02-11 09:47:44 +01:00
EpollDomainSocketStartTlsTest.java Add support for Unix Domain Sockets when using native epoll transport 2015-02-04 15:39:41 +01:00
EpollDomainSocketStringEchoTest.java Add support for Unix Domain Sockets when using native epoll transport 2015-02-04 15:39:41 +01:00
EpollETSocketAutoReadTest.java Make OIO/NIO/EPOLL autoReadClear consistent 2016-04-06 12:32:14 -07:00
EpollETSocketConditionalWritabilityTest.java Epoll flush/writabilityChange deadlock 2018-02-20 11:40:58 +01:00
EpollETSocketDataReadInitialStateTest.java Epoll and Kqueue shouldn't read by default (#8024) 2018-06-15 10:28:50 +02:00
EpollETSocketExceptionHandlingTest.java Make OIO/NIO/EPOLL autoReadClear consistent 2016-04-06 12:32:14 -07:00
EpollETSocketHalfClosed.java EpollRecvByteAllocatorHandle doesn't inform delegate of more data 2017-02-13 17:42:24 -08:00
EpollETSocketReadPendingTest.java Make OIO/NIO/EPOLL autoReadClear consistent 2016-04-06 12:32:14 -07:00
EpollETSocketStringEchoBusyWaitTest.java Added option to do busy-wait on epoll (#8267) 2018-09-28 22:52:00 +02:00
EpollEventLoopTest.java Introduce SingleThreadEventLoop.registeredChannels (#8428) 2019-03-28 11:33:12 +00:00
EpollLTSocketAutoReadTest.java Make OIO/NIO/EPOLL autoReadClear consistent 2016-04-06 12:32:14 -07:00
EpollLTSocketConditionalWritabilityTest.java Epoll flush/writabilityChange deadlock 2018-02-20 11:40:58 +01:00
EpollLTSocketDataReadInitialStateTest.java Epoll and Kqueue shouldn't read by default (#8024) 2018-06-15 10:28:50 +02:00
EpollLTSocketExceptionHandlingTest.java Make OIO/NIO/EPOLL autoReadClear consistent 2016-04-06 12:32:14 -07:00
EpollLTSocketHalfClosed.java EpollRecvByteAllocatorHandle doesn't inform delegate of more data 2017-02-13 17:42:24 -08:00
EpollLTSocketReadPendingTest.java Make OIO/NIO/EPOLL autoReadClear consistent 2016-04-06 12:32:14 -07:00
EpollLTSocketStringEchoBusyWaitTest.java Added option to do busy-wait on epoll (#8267) 2018-09-28 22:52:00 +02:00
EpollReuseAddrTest.java Update tests to not use TestUtils.getFreePort() and so ensure we not try to use a port that is used by the system in the meantime. 2017-07-20 08:25:37 +02:00
EpollServerSocketChannelConfigTest.java EpollSocketChannelConfig.getOptions() must not throw if TCP_FASTOPEN_CONNECT is not supported 2017-11-16 14:07:54 +01:00
EpollSocketChannelConfigTest.java EpollSocketChannelConfig.getOptions() must not throw if TCP_FASTOPEN_CONNECT is not supported 2017-11-16 14:07:54 +01:00
EpollSocketChannelNotYetConnectedTest.java Throw correct NotYetConnectedException when ENOTCONN errno is set 2016-08-24 07:41:24 +02:00
EpollSocketChannelTest.java Fix assertion error when closing / shutdown native channel and SO_LINGER is set. 2017-09-18 14:46:37 -07:00
EpollSocketCloseForciblyTest.java Only try to deregister from EventLoop when the native Channel was registered before. 2017-05-24 13:19:18 +02:00
EpollSocketConnectionAttemptTest.java [#3785] Correctly handle connection refused with native transport 2015-05-27 13:38:50 +02:00
EpollSocketConnectTest.java Ensure EpollSocketChannel.localAddress() returns correct address after connect(...) call. 2016-04-09 19:04:45 +02:00
EpollSocketEchoTest.java Perform cross-tests between NIO and epoll transport 2014-03-17 10:35:48 +09:00
EpollSocketFileRegionTest.java Perform cross-tests between NIO and epoll transport 2014-03-17 10:35:48 +09:00
EpollSocketFixedLengthEchoTest.java Perform cross-tests between NIO and epoll transport 2014-03-17 10:35:48 +09:00
EpollSocketGatheringWriteTest.java Perform cross-tests between NIO and epoll transport 2014-03-17 10:35:48 +09:00
EpollSocketMultipleConnectTest.java Make NIO and EPOLL transport connect errors more consistent with the JDK 2016-08-27 20:57:36 +02:00
EpollSocketObjectEchoTest.java Perform cross-tests between NIO and epoll transport 2014-03-17 10:35:48 +09:00
EpollSocketRstTest.java EPOLL SO_LINGER=0 sends FIN+RST 2016-03-16 22:35:04 -07:00
EpollSocketShutdownOutputByPeerTest.java DuplexChannel to support shutdownInput 2016-05-18 09:11:49 +02:00
EpollSocketShutdownOutputBySelfTest.java DuplexChannel to support shutdownInput 2016-05-18 09:11:49 +02:00
EpollSocketSslClientRenegotiateTest.java Support using an Executor to offload blocking / long-running tasks wh… (#8847) 2019-02-11 09:47:44 +01:00
EpollSocketSslEchoTest.java Test TLS renegotiation with explicit cipher suite change 2014-12-12 17:49:16 +09:00
EpollSocketSslGreetingTest.java Support using an Executor to offload blocking / long-running tasks wh… (#8847) 2019-02-11 09:47:44 +01:00
EpollSocketSslSessionReuseTest.java Add more tests to KQueue and Epoll testsuites. (#8851) 2019-02-08 20:08:34 +01:00
EpollSocketStartTlsTest.java Add an OpenSslEngine and the universal API for enabling SSL 2014-05-18 02:54:06 +09:00
EpollSocketStringEchoBusyWaitTest.java Added option to do busy-wait on epoll (#8267) 2018-09-28 22:52:00 +02:00
EpollSocketStringEchoTest.java Perform cross-tests between NIO and epoll transport 2014-03-17 10:35:48 +09:00
EpollSocketTcpMd5Test.java Use smaller connect timeout to speed up tests. 2016-03-06 17:47:38 +01:00
EpollSocketTest.java KQueueSocket#setTrafficClass exceptions 2017-05-18 11:26:27 -07:00
EpollSocketTestPermutation.java Add IPv6 multicast test to testsuite (#9037) 2019-04-12 12:29:08 +02:00
EpollSpliceTest.java Update to new checkstyle plugin (#8777) (#8780) 2019-01-25 11:58:42 +01:00
EpollTest.java Add testcase for epollWait(...) with negative timerfd values. (#8447) 2018-10-30 19:38:02 +01:00
EpollWriteBeforeRegisteredTest.java Add more tests to KQueue and Epoll testsuites. (#8851) 2019-02-08 20:08:34 +01:00
NativeTest.java Decouple Unix from Linux in Native Transport 2015-11-02 12:29:44 -08:00