Skip to content

HttpRequest#executeAsync leaks a thread on every call #2122

@gabrielreid

Description

@gabrielreid

The executeAsync method of com.google.api.client.http.HttpRequest currently leaks a thread on every call; this means that multiple calls to the method will eventually exhaust all memory.

A quick inspection of the code for this method shows that it creates a new thread pool on every call, and never shuts the pool down.

Steps to replicate

This issue can be easily replicated in a unit test; for example, the following code (added in HttpRequestTest.java) will fail with an OutOfMemoryError due to an inability to create a new thread.

  @Test
  public void testThreadLeak() throws Exception {
    for (int i = 0; i < 1000000; i++) {
      RedirectTransport fakeTransport = new RedirectTransport();
      HttpRequest request =
              fakeTransport.createRequestFactory().buildGetRequest(new GenericUrl("http://gmail.com"));
      Future<HttpResponse> resp = request.executeAsync();
      resp.get();
    }
  }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions