Skip to content

Found memory leak in InfluxDbClientBase #28

@marcel-kok

Description

@marcel-kok

This change fixed it. (HttpClient was never disposed)

private async Task RequestAsync(
IEnumerable errorHandlers,
HttpMethod method,
string path,
HttpContent content = null,
Dictionary<string, string> extraParams = null,
bool includeAuthToQuery = true,
bool headerIsBody = false,
TimeSpan? requestTimeout = null)
{
using (HttpClient client = GetHttpClient())
{
var response = await RequestInnerAsync(client, requestTimeout,
HttpCompletionOption.ResponseHeadersRead,
CancellationToken.None,
method,
path,
content,
extraParams,
includeAuthToQuery);

            string responseContent = String.Empty;

            if (!headerIsBody)
            {
                responseContent = await response.Content.ReadAsStringAsync();
            }
            else
            {
                IEnumerable<string> values;

                if (response.Headers.TryGetValues("X-Influxdb-Version", out values))
                {
                    responseContent = values.First();
                }
            }

            HandleIfErrorResponse(response.StatusCode, responseContent, errorHandlers);

            Debug.WriteLine("[Response] {0}", response.ToJson());
            Debug.WriteLine("[ResponseData] {0}", responseContent);

            return new InfluxDbApiResponse(response.StatusCode, responseContent);
        }
    }

    private async Task<HttpResponseMessage> RequestInnerAsync(
        HttpClient client,
        TimeSpan? requestTimeout,
        HttpCompletionOption completionOption,
        CancellationToken cancellationToken,
        HttpMethod method,
        string path,
        HttpContent content = null,
        Dictionary<string, string> extraParams = null,
        bool includeAuthToQuery = true)
    {
        if (requestTimeout.HasValue)
        {
            client.Timeout = requestTimeout.Value;
        }

        StringBuilder uri = BuildUri(path, extraParams, includeAuthToQuery);
        HttpRequestMessage request = PrepareRequest(method, content, uri);

        Debug.WriteLine("[Request] {0}", request.ToJson());
        if (content != null)
        {
            Debug.WriteLine("[RequestData] {0}", content.ReadAsStringAsync().Result);
        }

        return await client.SendAsync(request, completionOption, cancellationToken);
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions