Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6edbf68e authored by Daniel Nishi's avatar Daniel Nishi
Browse files

Explicitly close file stream when initializing quotas.

When the device boots and the StorageStatsService is initialized, we
load the last calculated cache quotas from a file. We were never closing
the FileInputStream and leaked a resource.

By using try-with-resources, we can avoid that.

Bug: 128920416
Test: Manual -- did not crash on a phone that booted a few times.
Change-Id: Ib85e571ddf033caf63eef7c69a91336dad1b55bc
parent f89753c6
Loading
Loading
Loading
Loading
+8 −11
Original line number Diff line number Diff line
@@ -66,7 +66,6 @@ import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * CacheQuotaStrategy is a strategy for determining cache quotas using usage stats and foreground
@@ -296,26 +295,24 @@ public class CacheQuotaStrategy implements RemoteCallback.OnResultListener {
     * @return the number of bytes that were free on the device when the quotas were last calced.
     */
    public long setupQuotasFromFile() throws IOException {
        FileInputStream stream;
        try {
            stream = mPreviousValuesFile.openRead();
        } catch (FileNotFoundException e) {
            // The file may not exist yet -- this isn't truly exceptional.
            return -1;
        }

        Pair<Long, List<CacheQuotaHint>> cachedValues = null;
        try (FileInputStream stream = mPreviousValuesFile.openRead()) {
            try {
                cachedValues = readFromXml(stream);
            } catch (XmlPullParserException e) {
                throw new IllegalStateException(e.getMessage());
            }
        } catch (FileNotFoundException e) {
            // The file may not exist yet -- this isn't truly exceptional.
            return -1;
        }

        if (cachedValues == null) {
            Slog.e(TAG, "An error occurred while parsing the cache quota file.");
            return -1;
        }
        pushProcessedQuotas(cachedValues.second);

        return cachedValues.first;
    }