From f3af9c52e7f9bd5a19a181e1abb87822dd9d615b Mon Sep 17 00:00:00 2001 From: Songchun Fan Date: Mon, 17 Apr 2023 15:43:47 -0700 Subject: [PATCH] [SettingsProvider] force close MemoryIntArray before garbage collection BUG: 277448672 BUG: 274971295 Test: builds Change-Id: I2f8c9e65721dcfc41a382e7bf9e0c2ad7e1c66aa --- core/java/android/provider/Settings.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 561f7982c1de6..2842cdb9178d7 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 {