swift-nio: TCPConnection handlers never deallocated
Expected behavior
[what you expected to happen] deinit aways called
Actual behavior
[what actually happened] deinit called sametimes
Steps to reproduce
-
Compile NIOEchoServer my implementation with close on idle timeout timer: NIOSrv.zip run it on separated Virtual Machine A (I use external server)
-
Open 20000 TCP connects You may use this: NetLoadTest 2.zip run it on separated Virtual Machine B (I use external server)
-
Press Ctrl+C on Virtual Machine B // result: not all connects on server side (Virtual Machine A: are closed even after timeout)
This scenario does not reproduce on 127.0.0.1 (only on differrent servers)
If possible, minimal yet complete reproducer code (or URL to code)
[anything to help us reproducing the issue]
SwiftNIO version/commit hash
"revision": "87dbd0216c47ea2e7ddb1b545271b716e03b943e",
"version": "1.13.1"
[the SwiftNIO tag/commit hash]
Swift & OS version (output of swift --version && uname -a
)
Swift version 4.2.3 (swift-4.2.3-RELEASE) Target: x86_64-unknown-linux-gnu Linux us-san-gate0 4.4.0-142-generic #168-Ubuntu SMP Wed Jan 16 21:00:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux ubuntu 16.0.4
About this issue
- Original URL
- State: closed
- Created 5 years ago
- Reactions: 4
- Comments: 31 (12 by maintainers)
Commits related to this issue
- Selector: make sure timerfd is level triggered Motivation: In the Selector (because of the deregistrationsHappened workaround) we expect all events to be level triggered. If there are deregistration... — committed to weissi/swift-nio by weissi 5 years ago
- Selector: make sure timerfd is level triggered Motivation: In the Selector (because of the deregistrationsHappened workaround) we expect all events to be level triggered. If there are deregistration... — committed to weissi/swift-nio by weissi 5 years ago
- Selector: make sure timerfd is level triggered (#880) Motivation: In the Selector (because of the deregistrationsHappened workaround) we expect all events to be level triggered. If there are dere... — committed to apple/swift-nio by weissi 5 years ago
- Selector: make sure timerfd is level triggered Motivation: In the Selector (because of the deregistrationsHappened workaround) we expect all events to be level triggered. If there are deregistration... — committed to weissi/swift-nio by weissi 5 years ago
- Selector: make sure timerfd is level triggered (#881) Motivation: In the Selector (because of the deregistrationsHappened workaround) we expect all events to be level triggered. If there are dere... — committed to apple/swift-nio by weissi 5 years ago
@allright ok, I found the bug. If you can, it would be awesome if you could confirm the fix this way:
after that I believe it should be fixed. If you prefer, you can also manually apply the diff:
@allright we released
1.13.2
which contains this bug fixI’have just retested again several times and I confirm. Epoll.EPOLLET - fix this issue.
With this flag, I observe freeze. Without - all ok! I think you may close issue:) Very big Thanks!
Sorry, I removed my comment - it was false. There were 300 seconds timeout in my code (IdleStateHandler). Will test your diff exactly. After 300 seconds all handlers are closed success
Will confirm on Monday only