From e747ec8f5c3496cd0fd5c223925d9b4e2bdbf9f3 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 3 Jan 2026 20:08:59 +0200 Subject: [PATCH] Fix disposing of the HttpRequestMessage --- .../Http/Dispatchers/ManagedHttpDispatcher.cs | 45 +++++++++---------- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs b/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs index 1a4aea165..392f7ed6c 100644 --- a/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs +++ b/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs @@ -53,11 +53,9 @@ namespace NzbDrone.Common.Http.Dispatchers public async Task GetResponseAsync(HttpRequest request, CookieContainer cookies) { - var requestMessage = new HttpRequestMessage(request.Method, (Uri)request.Url) - { - Version = HttpVersion.Version20, - VersionPolicy = HttpVersionPolicy.RequestVersionOrLower - }; + using var requestMessage = new HttpRequestMessage(request.Method, (Uri)request.Url); + requestMessage.Version = HttpVersion.Version20; + requestMessage.VersionPolicy = HttpVersionPolicy.RequestVersionOrLower; requestMessage.Headers.UserAgent.ParseAdd(_userAgentBuilder.GetUserAgent(request.UseSimplifiedUserAgent)); requestMessage.Headers.ConnectionClose = !request.ConnectionKeepAlive; @@ -113,31 +111,30 @@ namespace NzbDrone.Common.Http.Dispatchers try { using var responseMessage = await httpClient.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead, cts.Token); + + byte[] data = null; + + try { - byte[] data = null; - - try + if (request.ResponseStream != null && responseMessage.StatusCode == HttpStatusCode.OK) { - if (request.ResponseStream != null && responseMessage.StatusCode == HttpStatusCode.OK) - { - await responseMessage.Content.CopyToAsync(request.ResponseStream, null, cts.Token); - } - else - { - data = await responseMessage.Content.ReadAsByteArrayAsync(cts.Token); - } + await responseMessage.Content.CopyToAsync(request.ResponseStream, null, cts.Token); } - catch (Exception ex) + else { - throw new WebException("Failed to read complete http response", ex, WebExceptionStatus.ReceiveFailure, null); + data = await responseMessage.Content.ReadAsByteArrayAsync(cts.Token); } - - var headers = responseMessage.Headers.ToNameValueCollection(); - - headers.Add(responseMessage.Content.Headers.ToNameValueCollection()); - - return new HttpResponse(request, new HttpHeader(headers), data, responseMessage.StatusCode, responseMessage.Version); } + catch (Exception ex) + { + throw new WebException("Failed to read complete http response", ex, WebExceptionStatus.ReceiveFailure, null); + } + + var headers = responseMessage.Headers.ToNameValueCollection(); + + headers.Add(responseMessage.Content.Headers.ToNameValueCollection()); + + return new HttpResponse(request, new HttpHeader(headers), data, responseMessage.StatusCode, responseMessage.Version); } catch (OperationCanceledException ex) when (cts.IsCancellationRequested) {