From 728ab7faa7a33eec7d25e092bb6499918fb6fee3 Mon Sep 17 00:00:00 2001 From: Eugene Kabanov Date: Fri, 27 May 2022 20:28:39 +0300 Subject: [PATCH] Fix one more place of assertion for high concurrency requests. (#277) --- chronos/apps/http/httpclient.nim | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/chronos/apps/http/httpclient.nim b/chronos/apps/http/httpclient.nim index f4fa2d57..e173314c 100644 --- a/chronos/apps/http/httpclient.nim +++ b/chronos/apps/http/httpclient.nim @@ -274,6 +274,13 @@ proc setupHttpClientResponseTracker(): HttpClientTracker {.gcsafe.} = addTracker(HttpClientResponseTrackerName, res) res +template checkClosed(reqresp: untyped): untyped = + if reqresp.connection.state in {HttpClientConnectionState.Closing, + HttpClientConnectionState.Closed}: + let e = newHttpUseClosedError() + reqresp.setError(e) + raise e + proc new*(t: typedesc[HttpSessionRef], flags: HttpClientFlags = {}, maxRedirections = HttpMaxRedirections, @@ -1073,11 +1080,7 @@ proc finish*(request: HttpClientRequestRef): Future[HttpClientResponseRef] {. ## Finish sending request and receive response. doAssert(not(isNil(request.connection)), "Request missing connection instance") - if request.connection.state in {HttpClientConnectionState.Closing, - HttpClientConnectionState.Closed}: - let e = newHttpUseClosedError() - request.setError(e) - raise e + request.checkClosed() doAssert(request.state == HttpReqRespState.Open, "Request's state is " & $request.state) doAssert(request.connection.state == @@ -1145,6 +1148,7 @@ proc finish*(response: HttpClientResponseRef) {.async.} = if response.state == HttpReqRespState.Open: doAssert(not(isNil(response.connection)), "Response missing connection instance") + response.checkClosed() doAssert(response.connection.state == HttpClientConnectionState.ResponseBodyReceiving, "Connection state is " & $response.connection.state)