summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Makoto Onuki <omakoto@google.com> 2017-08-18 21:02:54 +0000
committer android-build-merger <android-build-merger@google.com> 2017-08-18 21:02:54 +0000
commit4558b89ca29b59b509d7648cde37b294ea340574 (patch)
treef92d14be9bcce2035a79dc5abaaf0ad462e39b81
parent99512fd446e7db1a6c7bfb48180abd8cae1b2432 (diff)
parentedda7ebdd98676e503d44a98b18756d28e484290 (diff)
Merge "Avoid potential reboot loop due to package cache" into oc-mr1-dev
am: edda7ebdd9 Change-Id: Ide5189580c7b930e4aa86aa68b52460b91d6f8d7
-rw-r--r--core/java/android/content/pm/PackageParser.java46
1 files changed, 25 insertions, 21 deletions
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 9b9499cd602d..7ae85225ef1b 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -1120,12 +1120,12 @@ public class PackageParser {
final String cacheKey = getCacheKey(packageFile, flags);
final File cacheFile = new File(mCacheDir, cacheKey);
- // If the cache is not up to date, return null.
- if (!isCacheUpToDate(packageFile, cacheFile)) {
- return null;
- }
-
try {
+ // If the cache is not up to date, return null.
+ if (!isCacheUpToDate(packageFile, cacheFile)) {
+ return null;
+ }
+
final byte[] bytes = IoUtils.readFileAsByteArray(cacheFile.getAbsolutePath());
Package p = fromCacheEntry(bytes);
if (mCallback != null) {
@@ -1140,7 +1140,7 @@ public class PackageParser {
}
}
return p;
- } catch (Exception e) {
+ } catch (Throwable e) {
Slog.w(TAG, "Error reading package cache: ", e);
// If something went wrong while reading the cache entry, delete the cache file
@@ -1158,26 +1158,30 @@ public class PackageParser {
return;
}
- final String cacheKey = getCacheKey(packageFile, flags);
- final File cacheFile = new File(mCacheDir, cacheKey);
+ try {
+ final String cacheKey = getCacheKey(packageFile, flags);
+ final File cacheFile = new File(mCacheDir, cacheKey);
- if (cacheFile.exists()) {
- if (!cacheFile.delete()) {
- Slog.e(TAG, "Unable to delete cache file: " + cacheFile);
+ if (cacheFile.exists()) {
+ if (!cacheFile.delete()) {
+ Slog.e(TAG, "Unable to delete cache file: " + cacheFile);
+ }
}
- }
- final byte[] cacheEntry = toCacheEntry(parsed);
+ final byte[] cacheEntry = toCacheEntry(parsed);
- if (cacheEntry == null) {
- return;
- }
+ if (cacheEntry == null) {
+ return;
+ }
- try (FileOutputStream fos = new FileOutputStream(cacheFile)) {
- fos.write(cacheEntry);
- } catch (IOException ioe) {
- Slog.w(TAG, "Error writing cache entry.", ioe);
- cacheFile.delete();
+ try (FileOutputStream fos = new FileOutputStream(cacheFile)) {
+ fos.write(cacheEntry);
+ } catch (IOException ioe) {
+ Slog.w(TAG, "Error writing cache entry.", ioe);
+ cacheFile.delete();
+ }
+ } catch (Throwable e) {
+ Slog.w(TAG, "Error saving package cache.", e);
}
}