diff options
| -rw-r--r-- | core/java/android/provider/Settings.java | 13 |
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 { |