@@ -43,6 +43,9 @@ final class RequestBag<Delegate: HTTPClientResponseDelegate> {
43
43
// the consume body part stack depth is synchronized on the task event loop.
44
44
private var consumeBodyPartStackDepth : Int
45
45
46
+ // if a redirect occurs, we store the task for it so we can propagate cancellation
47
+ private var redirectTask : HTTPClient . Task < Delegate . Response > ? = nil
48
+
46
49
// MARK: HTTPClientTask properties
47
50
48
51
var logger : Logger {
@@ -234,7 +237,7 @@ final class RequestBag<Delegate: HTTPClientResponseDelegate> {
234
237
executor. demandResponseBodyStream ( self )
235
238
236
239
case . redirect( let executor, let handler, let head, let newURL) :
237
- handler. redirect ( status: head. status, to: newURL, promise: self . task. promise)
240
+ self . redirectTask = handler. redirect ( status: head. status, to: newURL, promise: self . task. promise)
238
241
executor. cancelRequest ( self )
239
242
240
243
case . forwardResponseHead( let head) :
@@ -258,7 +261,7 @@ final class RequestBag<Delegate: HTTPClientResponseDelegate> {
258
261
executor. demandResponseBodyStream ( self )
259
262
260
263
case . redirect( let executor, let handler, let head, let newURL) :
261
- handler. redirect ( status: head. status, to: newURL, promise: self . task. promise)
264
+ self . redirectTask = handler. redirect ( status: head. status, to: newURL, promise: self . task. promise)
262
265
executor. cancelRequest ( self )
263
266
264
267
case . forwardResponsePart( let part) :
@@ -294,7 +297,7 @@ final class RequestBag<Delegate: HTTPClientResponseDelegate> {
294
297
}
295
298
296
299
case . redirect( let handler, let head, let newURL) :
297
- handler. redirect ( status: head. status, to: newURL, promise: self . task. promise)
300
+ self . redirectTask = handler. redirect ( status: head. status, to: newURL, promise: self . task. promise)
298
301
}
299
302
}
300
303
@@ -368,6 +371,8 @@ final class RequestBag<Delegate: HTTPClientResponseDelegate> {
368
371
self . failTask0 ( error)
369
372
case . cancelExecutor( let executor) :
370
373
executor. cancelRequest ( self )
374
+ case . propagateCancellation:
375
+ self . redirectTask? . cancel ( )
371
376
case . none:
372
377
break
373
378
}
0 commit comments