googleapis / googleapis/google-http-java-client

HttpRequest#executeAsync leaks a thread on every call

Offen
#2,122 0 Kommentare 2 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
priority: p3 type: bug
Vorherrschende Sprache
Java
Sterne
1.4k
Forks
473
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

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();
}
}
```

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.