googleapis / googleapis/google-http-java-client

HttpRequest#executeAsync leaks a thread on every call

Abierto
#2,122 0 comentarios 2 reacciones 0 asignados Ver en GitHub
priority: p3 type: bug
Lenguaje dominante
Java
Estrellas
1.4k
Forks
473
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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](https://github.com/googleapis/google-http-java-client/blob/main/google-http-client/src/main/java/com/google/api/client/http/HttpRequest.java#L1156-L1160) 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.

```java
@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 resp = request.executeAsync();
resp.get();
}
}
```

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.