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
This commit is contained in:
committed by
Koji Fukui
parent
539dbe61c5
commit
f740b56f0e
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user