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();
}
}
The
executeAsyncmethod ofcom.google.api.client.http.HttpRequestcurrently 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 anOutOfMemoryErrordue to an inability to create a new thread.