1313//===----------------------------------------------------------------------===//
1414
1515import Foundation
16+ import Logging
1617import NIO
1718import NIOConcurrencyHelpers
1819import NIOFoundationCompat
@@ -494,17 +495,19 @@ extension HTTPClient {
494495 var connection : Connection ?
495496 var cancelled : Bool
496497 let lock : Lock
498+ let logger : Logger // We are okay to store the logger here because a Task is for only ond request.
497499
498- init ( eventLoop: EventLoop ) {
500+ init ( eventLoop: EventLoop , logger : Logger ) {
499501 self . eventLoop = eventLoop
500502 self . promise = eventLoop. makePromise ( )
501503 self . completion = self . promise. futureResult. map { _ in }
502504 self . cancelled = false
503505 self . lock = Lock ( )
506+ self . logger = logger
504507 }
505508
506- static func failedTask( eventLoop: EventLoop , error: Error ) -> Task < Response > {
507- let task = self . init ( eventLoop: eventLoop)
509+ static func failedTask( eventLoop: EventLoop , error: Error , logger : Logger ) -> Task < Response > {
510+ let task = self . init ( eventLoop: eventLoop, logger : logger )
508511 task. promise. fail ( error)
509512 return task
510513 }
@@ -546,13 +549,18 @@ extension HTTPClient {
546549 }
547550 }
548551
549- func succeed< Delegate: HTTPClientResponseDelegate > ( promise: EventLoopPromise < Response > ? , with value: Response , delegateType: Delegate . Type , closing: Bool ) {
550- self . releaseAssociatedConnection ( delegateType: delegateType, closing: closing) . whenSuccess {
552+ func succeed< Delegate: HTTPClientResponseDelegate > ( promise: EventLoopPromise < Response > ? ,
553+ with value: Response ,
554+ delegateType: Delegate . Type ,
555+ closing: Bool ) {
556+ self . releaseAssociatedConnection ( delegateType: delegateType,
557+ closing: closing) . whenSuccess {
551558 promise? . succeed ( value)
552559 }
553560 }
554561
555- func fail< Delegate: HTTPClientResponseDelegate > ( with error: Error , delegateType: Delegate . Type ) {
562+ func fail< Delegate: HTTPClientResponseDelegate > ( with error: Error ,
563+ delegateType: Delegate . Type ) {
556564 if let connection = self . connection {
557565 self . releaseAssociatedConnection ( delegateType: delegateType, closing: true )
558566 . whenSuccess {
@@ -562,13 +570,14 @@ extension HTTPClient {
562570 }
563571 }
564572
565- func releaseAssociatedConnection< Delegate: HTTPClientResponseDelegate > ( delegateType: Delegate . Type , closing: Bool ) -> EventLoopFuture < Void > {
573+ func releaseAssociatedConnection< Delegate: HTTPClientResponseDelegate > ( delegateType: Delegate . Type ,
574+ closing: Bool ) -> EventLoopFuture < Void > {
566575 if let connection = self . connection {
567576 // remove read timeout handler
568577 return connection. removeHandler ( IdleStateHandler . self) . flatMap {
569578 connection. removeHandler ( TaskHandler< Delegate> . self )
570579 } . map {
571- connection. release ( closing: closing)
580+ connection. release ( closing: closing, logger : self . logger )
572581 } . flatMapError { error in
573582 fatalError ( " Couldn't remove taskHandler: \( error) " )
574583 }
@@ -600,6 +609,7 @@ internal class TaskHandler<Delegate: HTTPClientResponseDelegate>: RemovableChann
600609 let delegate : Delegate
601610 let redirectHandler : RedirectHandler < Delegate . Response > ?
602611 let ignoreUncleanSSLShutdown : Bool
612+ let logger : Logger // We are okay to store the logger here because a TaskHandler is just for one request.
603613
604614 var state : State = . idle
605615 var pendingRead = false
@@ -617,12 +627,14 @@ internal class TaskHandler<Delegate: HTTPClientResponseDelegate>: RemovableChann
617627 kind: HTTPClient . Request . Kind ,
618628 delegate: Delegate ,
619629 redirectHandler: RedirectHandler < Delegate . Response > ? ,
620- ignoreUncleanSSLShutdown: Bool ) {
630+ ignoreUncleanSSLShutdown: Bool ,
631+ logger: Logger ) {
621632 self . task = task
622633 self . delegate = delegate
623634 self . redirectHandler = redirectHandler
624635 self . ignoreUncleanSSLShutdown = ignoreUncleanSSLShutdown
625636 self . kind = kind
637+ self . logger = logger
626638 }
627639}
628640
@@ -678,7 +690,10 @@ extension TaskHandler {
678690 do {
679691 let result = try body ( self . task)
680692
681- self . task. succeed ( promise: promise, with: result, delegateType: Delegate . self, closing: self . closing)
693+ self . task. succeed ( promise: promise,
694+ with: result,
695+ delegateType: Delegate . self,
696+ closing: self . closing)
682697 } catch {
683698 self . task. fail ( with: error, delegateType: Delegate . self)
684699 }
0 commit comments