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

Commit f740b56f authored by Takashi Nagaya's avatar Takashi Nagaya Committed by Koji Fukui
Browse files

Fixed to prevent usagestats file corruption when writing

Currently, usagestats file may be currupted when writing
fails. Because AtomicFile#failWrite(fos) is always called
with argument null. Modify argument of this method so that
it is not null when writing fails.

Bug: 177501256
Change-Id: I1bb64a9af7941ab80abe3f98ad5b8ecf6d1b46d6
parent 539dbe61
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -1025,6 +1025,8 @@ public class UsageStatsDatabase {
            writeLocked(fos, stats, version, packagesTokenData);
            file.finishWrite(fos);
            fos = null;
        } catch (Exception e) {
            // Do nothing. Exception has already been handled.
        } finally {
            // When fos is null (successful write), this will no-op
            file.failWrite(fos);
@@ -1032,7 +1034,7 @@ public class UsageStatsDatabase {
    }

    private static void writeLocked(OutputStream out, IntervalStats stats, int version,
            PackagesTokenData packagesTokenData) throws RuntimeException {
            PackagesTokenData packagesTokenData) throws Exception {
        switch (version) {
            case 1:
            case 2:
@@ -1044,6 +1046,7 @@ public class UsageStatsDatabase {
                    UsageStatsProto.write(out, stats);
                } catch (Exception e) {
                    Slog.e(TAG, "Unable to write interval stats to proto.", e);
                    throw e;
                }
                break;
            case 5:
@@ -1052,6 +1055,7 @@ public class UsageStatsDatabase {
                    UsageStatsProtoV2.write(out, stats);
                } catch (Exception e) {
                    Slog.e(TAG, "Unable to write interval stats to proto.", e);
                    throw e;
                }
                break;
            default: