From f23bc5e96789f9e2c33e16416d194fdb279ae6dd Mon Sep 17 00:00:00 2001 From: Gabriele M Date: Thu, 6 Jul 2017 21:46:54 +0200 Subject: [PATCH] Close response body when download is complete Response.body().source() requires an explicit close() call. --- src/org/lineageos/updater/DownloadClient.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/org/lineageos/updater/DownloadClient.java b/src/org/lineageos/updater/DownloadClient.java index d52740a..74070cf 100644 --- a/src/org/lineageos/updater/DownloadClient.java +++ b/src/org/lineageos/updater/DownloadClient.java @@ -187,6 +187,7 @@ public class DownloadClient { public void onResponse(Response response) { Log.d(TAG, "Downloading"); + final ResponseBody body = response.body(); final boolean resume = response.code() == 206; if (resume) { mResumeOffset = destination.length(); @@ -194,6 +195,11 @@ public class DownloadClient { } else if (!isSuccessful(response.code())) { Log.e(TAG, "The server replied with code " + response.code()); callback.onFailure(mCancelled); + try { + body.close(); + } catch (IOException e) { + Log.e(TAG, "Could not close reponse body", e); + } return; } @@ -201,12 +207,18 @@ public class DownloadClient { new Headers(response.headers())); try (BufferedSink sink = Okio.buffer(resume ? Okio.appendingSink(destination) : Okio.sink(destination))) { - sink.writeAll(response.body().source()); + sink.writeAll(body.source()); Log.d(TAG, "Download complete"); sink.flush(); callback.onSuccess(null); } catch (IOException e) { onFailure(request, e); + } finally { + try { + body.close(); + } catch (IOException e) { + Log.e(TAG, "Could not close reponse body", e); + } } } });