Fix OkHttp connection leaks on connection error

When request fails, entire response needs to be wrapped in try with
resources in order to close the connection properly and not only
response body.

Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
Tomas Slusny
2017-12-22 02:05:28 +01:00
parent a6fde8fb28
commit 4660bb3739
9 changed files with 77 additions and 104 deletions

View File

@@ -33,7 +33,6 @@ import net.runelite.http.api.RuneliteAPI;
import okhttp3.HttpUrl;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -65,11 +64,9 @@ public class AccountClient
.url(url)
.build();
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
try (ResponseBody body = response.body())
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
{
InputStream in = body.byteStream();
InputStream in = response.body().byteStream();
return RuneliteAPI.GSON.fromJson(new InputStreamReader(in), OAuthResponse.class);
}
catch (JsonParseException ex)
@@ -92,9 +89,7 @@ public class AccountClient
.url(url)
.build();
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
try (ResponseBody body = response.body())
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
{
logger.debug("Sent logout request");
}

View File

@@ -35,7 +35,6 @@ import okhttp3.MediaType;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -65,11 +64,9 @@ public class ConfigClient
.url(url)
.build();
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
try (ResponseBody body = response.body())
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
{
InputStream in = body.byteStream();
InputStream in = response.body().byteStream();
return RuneliteAPI.GSON.fromJson(new InputStreamReader(in), Configuration.class);
}
catch (JsonParseException ex)

View File

@@ -32,7 +32,6 @@ import net.runelite.http.api.RuneliteAPI;
import okhttp3.HttpUrl;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -55,11 +54,9 @@ public class HiscoreClient
.url(url)
.build();
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
try (ResponseBody body = response.body())
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
{
InputStream in = body.byteStream();
InputStream in = response.body().byteStream();
return RuneliteAPI.GSON.fromJson(new InputStreamReader(in), HiscoreResult.class);
}
catch (JsonParseException ex)
@@ -76,24 +73,22 @@ public class HiscoreClient
public SingleHiscoreSkillResult lookup(String username, HiscoreSkill skill, HiscoreEndpoint endpoint) throws IOException
{
HttpUrl.Builder builder = RuneliteAPI.getApiBase().newBuilder()
.addPathSegment("hiscore")
.addPathSegment(endpoint.name())
.addPathSegment(skill.toString().toLowerCase())
.addQueryParameter("username", username);
.addPathSegment("hiscore")
.addPathSegment(endpoint.name())
.addPathSegment(skill.toString().toLowerCase())
.addQueryParameter("username", username);
HttpUrl url = builder.build();
logger.debug("Built URI: {}", url);
Request request = new Request.Builder()
.url(url)
.build();
.url(url)
.build();
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
try (ResponseBody body = response.body())
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
{
InputStream in = body.byteStream();
InputStream in = response.body().byteStream();
return RuneliteAPI.GSON.fromJson(new InputStreamReader(in), SingleHiscoreSkillResult.class);
}
catch (JsonParseException ex)

View File

@@ -32,7 +32,6 @@ import net.runelite.http.api.RuneliteAPI;
import okhttp3.HttpUrl;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -54,17 +53,15 @@ public class ItemClient
.url(url)
.build();
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
if (!response.isSuccessful())
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
{
logger.debug("Error looking up item {}: {}", itemId, response.message());
return null;
}
if (!response.isSuccessful())
{
logger.debug("Error looking up item {}: {}", itemId, response.message());
return null;
}
try (ResponseBody body = response.body())
{
InputStream in = body.byteStream();
InputStream in = response.body().byteStream();
return RuneliteAPI.GSON.fromJson(new InputStreamReader(in), ItemPrice.class);
}
catch (JsonParseException ex)
@@ -76,28 +73,26 @@ public class ItemClient
public SearchResult search(String itemName) throws IOException
{
HttpUrl url = RuneliteAPI.getApiBase().newBuilder()
.addPathSegment("item")
.addPathSegment("search")
.addQueryParameter("query", itemName)
.build();
.addPathSegment("item")
.addPathSegment("search")
.addQueryParameter("query", itemName)
.build();
logger.debug("Built URI: {}", url);
Request request = new Request.Builder()
.url(url)
.build();
.url(url)
.build();
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
if (!response.isSuccessful())
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
{
logger.debug("Error looking up item {}: {}", itemName, response.message());
return null;
}
if (!response.isSuccessful())
{
logger.debug("Error looking up item {}: {}", itemName, response.message());
return null;
}
try (ResponseBody body = response.body())
{
InputStream in = body.byteStream();
InputStream in = response.body().byteStream();
return RuneliteAPI.GSON.fromJson(new InputStreamReader(in), SearchResult.class);
}
catch (JsonParseException ex)

View File

@@ -36,7 +36,6 @@ import okhttp3.MediaType;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -83,11 +82,9 @@ public class XteaClient
.url(url)
.build();
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
try (ResponseBody body = response.body())
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
{
InputStream in = body.byteStream();
InputStream in = response.body().byteStream();
// CHECKSTYLE:OFF
return RuneliteAPI.GSON.fromJson(new InputStreamReader(in), new TypeToken<List<XteaKey>>() { }.getType());
// CHECKSTYLE:ON
@@ -109,11 +106,9 @@ public class XteaClient
.url(url)
.build();
Response response = RuneliteAPI.CLIENT.newCall(request).execute();
try (ResponseBody body = response.body())
try (Response response = RuneliteAPI.CLIENT.newCall(request).execute())
{
InputStream in = body.byteStream();
InputStream in = response.body().byteStream();
return RuneliteAPI.GSON.fromJson(new InputStreamReader(in), XteaKey.class);
}
catch (JsonParseException ex)