netty5/transport-native-kqueue/src/test/java/io/netty/channel/kqueue
Scott Mitchell ce241bd11e Epoll flush/writabilityChange deadlock
Motivation:
b215794de3 recently introduced a change in behavior where writeSpinCount provided a limit for how many write operations were attempted per flush operation. However when the write quantum was meet the selector write flag was not cleared, and the channel unsafe flush0 method has an optimization which prematurely exits if the write flag is set. This may lead to no write progress being made under the following scenario:
- flush is called, but the socket can't accept all data, we set the write flag
- the selector wakes us up because the socket is writable, we write data and use the writeSpinCount quantum
- we then schedule a flush() on the EventLoop to execute later, however it the flush0 optimization prematurely exits because the write flag is still set

In this scenario the socket is still writable so the EventLoop may never notify us that the socket is writable, and therefore we may never attempt to flush data to the OS.

Modifications:
- When the writeSpinCount quantum is exceeded we should clear the selector write flag

Result:
Fixes https://github.com/netty/netty/issues/7729
2018-02-20 11:40:58 +01:00
..
KQueueAbstractDomainSocketEchoTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueChannelConfigTest.java Fix assertion error when closing / shutdown native channel and SO_LINGER is set. 2017-09-18 14:46:37 -07:00
KQueueCompositeBufferGatheringWriteTest.java IovArray#add return value resulted in more ByteBufs being added during iteration 2018-01-04 08:04:32 -08:00
KQueueDatagramConnectNotExistsTest.java Correctly handle connect/disconnect in EpollDatagramChannel / KQueueDatagramChannel 2017-08-04 09:22:53 +02:00
KQueueDatagramUnicastTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueDetectPeerCloseWithoutReadTest.java KQueue detect peer close without EVFILT_READ 2017-08-18 11:00:18 -07:00
KQueueDomainSocketEchoTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueDomainSocketFdTest.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
KQueueDomainSocketFileRegionTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueDomainSocketFixedLengthEchoTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueDomainSocketGatheringWriteTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueDomainSocketObjectEchoTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueDomainSocketSslEchoTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueDomainSocketSslGreetingTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueDomainSocketStartTlsTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueDomainSocketStringEchoTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueETSocketAutoReadTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueETSocketConditionalWritabilityTest.java Epoll flush/writabilityChange deadlock 2018-02-20 11:40:58 +01:00
KQueueETSocketExceptionHandlingTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueETSocketHalfClosedTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueETSocketReadPendingTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueRcvAllocatorOverrideSocketSslEchoTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueServerSocketChannelConfigTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueSocketChannelConfigTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueSocketChannelNotYetConnectedTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueSocketCloseForciblyTest.java Only try to deregister from EventLoop when the native Channel was registered before. 2017-05-24 13:19:18 +02:00
KQueueSocketConnectionAttemptTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueSocketConnectTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueSocketEchoTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueSocketFileRegionTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueSocketFixedLengthEchoTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueSocketGatheringWriteTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueSocketMultipleConnectTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueSocketObjectEchoTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueSocketRstTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueSocketShutdownOutputByPeerTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueSocketShutdownOutputBySelfTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueSocketSslEchoTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueSocketSslGreetingTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueSocketStartTlsTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueSocketStringEchoTest.java New native transport for kqueue 2017-05-03 09:53:22 -07:00
KQueueSocketTest.java KQueueSocket#setTrafficClass exceptions 2017-05-18 11:26:27 -07:00
KQueueSocketTestPermutation.java Correctly handle connect/disconnect in EpollDatagramChannel / KQueueDatagramChannel 2017-08-04 09:22:53 +02:00