Always clear read idle timeout at the end of a request (#455)

This commit is contained in:
David Nadoba
2021-10-08 16:29:28 +02:00
committed by GitHub
parent a0b09857d8
commit d5bd8d6526
6 changed files with 122 additions and 4 deletions
@@ -196,11 +196,13 @@ final class HTTP2ClientRequestHandler: ChannelDuplexHandler {
case .failRequest(let error, let finalAction):
self.request!.fail(error)
self.request = nil
self.runTimeoutAction(.clearIdleReadTimeoutTimer, context: context)
self.runFinalAction(finalAction, context: context)
case .succeedRequest(let finalAction, let finalParts):
self.request!.succeedRequest(finalParts)
self.request = nil
self.runTimeoutAction(.clearIdleReadTimeoutTimer, context: context)
self.runFinalAction(finalAction, context: context)
}
}
@@ -224,6 +226,7 @@ final class HTTP2ClientRequestHandler: ChannelDuplexHandler {
assert(self.idleReadTimeoutTimer == nil, "Expected there is no timeout timer so far.")
self.idleReadTimeoutTimer = self.eventLoop.scheduleTask(in: timeAmount) {
guard self.idleReadTimeoutTimer != nil else { return }
let action = self.state.idleReadTimeoutTriggered()
self.run(action, context: context)
}
@@ -234,10 +237,10 @@ final class HTTP2ClientRequestHandler: ChannelDuplexHandler {
}
self.idleReadTimeoutTimer = self.eventLoop.scheduleTask(in: timeAmount) {
guard self.idleReadTimeoutTimer != nil else { return }
let action = self.state.idleReadTimeoutTriggered()
self.run(action, context: context)
}
case .clearIdleReadTimeoutTimer:
if let oldTimer = self.idleReadTimeoutTimer {
self.idleReadTimeoutTimer = nil