@@ -591,15 +591,22 @@ public final class ResponseAccumulator: HTTPClientResponseDelegate {
591
591
}
592
592
593
593
public func didReceiveHead( task: HTTPClient . Task < Response > , _ head: HTTPResponseHead ) -> EventLoopFuture < Void > {
594
- self . state. withLockedValue {
594
+ let responseTooBig : Bool
595
+
596
+ if self . requestMethod != . HEAD,
597
+ let contentLength = head. headers. first ( name: " Content-Length " ) ,
598
+ let announcedBodySize = Int ( contentLength) ,
599
+ announcedBodySize > self . maxBodySize {
600
+ responseTooBig = true
601
+ } else {
602
+ responseTooBig = false
603
+ }
604
+
605
+ return self . state. withLockedValue {
595
606
switch $0. state {
596
607
case . idle:
597
- if self . requestMethod != . HEAD,
598
- let contentLength = head. headers. first ( name: " Content-Length " ) ,
599
- let announcedBodySize = Int ( contentLength) ,
600
- announcedBodySize > self . maxBodySize
601
- {
602
- let error = ResponseTooBigError ( maxBodySize: maxBodySize)
608
+ if responseTooBig {
609
+ let error = ResponseTooBigError ( maxBodySize: self . maxBodySize)
603
610
$0. state = . error( error)
604
611
return task. eventLoop. makeFailedFuture ( error)
605
612
}
@@ -910,8 +917,7 @@ extension HTTPClient {
910
917
///
911
918
/// Will be created by the library and could be used for obtaining
912
919
/// `EventLoopFuture<Response>` of the execution or cancellation of the execution.
913
- @preconcurrency
914
- public final class Task < Response: Sendable > {
920
+ public final class Task < Response> : Sendable {
915
921
/// The `EventLoop` the delegate will be executed on.
916
922
public let eventLoop : EventLoop
917
923
/// The `Logger` used by the `Task` for logging.
@@ -939,14 +945,14 @@ extension HTTPClient {
939
945
}
940
946
}
941
947
942
- private let makeOrGetFileIOThreadPool : ( ) -> NIOThreadPool
948
+ private let makeOrGetFileIOThreadPool : @ Sendable ( ) -> NIOThreadPool
943
949
944
950
/// The shared thread pool of a ``HTTPClient`` used for file IO. It is lazily created on first access.
945
951
internal var fileIOThreadPool : NIOThreadPool {
946
952
self . makeOrGetFileIOThreadPool ( )
947
953
}
948
954
949
- init ( eventLoop: EventLoop , logger: Logger , makeOrGetFileIOThreadPool: @escaping ( ) -> NIOThreadPool ) {
955
+ init ( eventLoop: EventLoop , logger: Logger , makeOrGetFileIOThreadPool: @escaping @ Sendable ( ) -> NIOThreadPool ) {
950
956
self . eventLoop = eventLoop
951
957
self . promise = eventLoop. makePromise ( )
952
958
self . logger = logger
@@ -958,7 +964,7 @@ extension HTTPClient {
958
964
eventLoop: EventLoop ,
959
965
error: Error ,
960
966
logger: Logger ,
961
- makeOrGetFileIOThreadPool: @escaping ( ) -> NIOThreadPool
967
+ makeOrGetFileIOThreadPool: @escaping @ Sendable ( ) -> NIOThreadPool
962
968
) -> Task < Response > {
963
969
let task = self . init (
964
970
eventLoop: eventLoop,
@@ -1017,15 +1023,6 @@ extension HTTPClient {
1017
1023
taskDelegate? . fail ( error)
1018
1024
}
1019
1025
1020
- func succeed< Delegate: HTTPClientResponseDelegate > (
1021
- promise: EventLoopPromise < Response > ? ,
1022
- with value: Response ,
1023
- delegateType: Delegate . Type ,
1024
- closing: Bool
1025
- ) {
1026
- promise? . succeed ( value)
1027
- }
1028
-
1029
1026
func fail< Delegate: HTTPClientResponseDelegate > (
1030
1027
with error: Error ,
1031
1028
delegateType: Delegate . Type
@@ -1035,8 +1032,6 @@ extension HTTPClient {
1035
1032
}
1036
1033
}
1037
1034
1038
- extension HTTPClient . Task : @unchecked Sendable { }
1039
-
1040
1035
internal struct TaskCancelEvent { }
1041
1036
1042
1037
// MARK: - RedirectHandler
0 commit comments