@@ -17,6 +17,26 @@ class TestResponseResolver: HTTPResponseWriter {
1717
1818 var response : ( status: HTTPResponseStatus , headers: HTTPHeaders ) ?
1919 var responseBody : HTTPResponseBody ?
20+
21+ ///Flag to track whether our handler has told us not to call it anymore
22+ private let _shouldStopProcessingBodyLock = DispatchSemaphore ( value: 1 )
23+ private var _shouldStopProcessingBody : Bool = false
24+ private var shouldStopProcessingBody : Bool {
25+ get {
26+ _shouldStopProcessingBodyLock. wait ( )
27+ defer {
28+ _shouldStopProcessingBodyLock. signal ( )
29+ }
30+ return _shouldStopProcessingBody
31+ }
32+ set {
33+ _shouldStopProcessingBodyLock. wait ( )
34+ defer {
35+ _shouldStopProcessingBodyLock. signal ( )
36+ }
37+ _shouldStopProcessingBody = newValue
38+ }
39+ }
2040
2141 init ( request: HTTPRequest , requestBody: Data ) {
2242 self . request = request
@@ -31,18 +51,17 @@ class TestResponseResolver: HTTPResponseWriter {
3151
3252 func resolveHandler( _ handler: HTTPRequestHandler ) {
3353 let chunkHandler = handler ( request, self )
34- var stop = false
35- var finished = false
36- while !stop && !finished {
37- switch chunkHandler {
54+ if shouldStopProcessingBody {
55+ return
56+ }
57+ switch chunkHandler {
3858 case . processBody( let handler) :
39- handler ( . chunk ( data : self . requestBody , finishedProcessing : {
40- finished = true
41- } ) , & stop )
42- handler ( . end, & stop )
59+ _shouldStopProcessingBodyLock . wait ( )
60+ handler ( . chunk ( data : self . requestBody , finishedProcessing : { self . _shouldStopProcessingBodyLock . signal ( ) } ) , & _shouldStopProcessingBody )
61+ var dummy = false
62+ handler ( . end, & dummy )
4363 case . discardBody:
44- finished = true
45- }
64+ break
4665 }
4766 }
4867
0 commit comments