summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/provider/Settings.java13
1 files changed, 11 insertions, 2 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 561f7982c1de..2842cdb9178d 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -3037,14 +3037,23 @@ public final class Settings {
public void destroy() {
try {
// If this process is the system server process, mArray is the same object as
- // the memory int array kept inside SetingsProvider, so skipping the close()
- if (!Settings.isInSystemServer()) {
+ // the memory int array kept inside SettingsProvider, so skipping the close()
+ if (!Settings.isInSystemServer() && !mArray.isClosed()) {
mArray.close();
}
} catch (IOException e) {
Log.e(TAG, "Error closing backing array", e);
}
}
+
+ @Override
+ protected void finalize() throws Throwable {
+ try {
+ destroy();
+ } finally {
+ super.finalize();
+ }
+ }
}
private static final class ContentProviderHolder {