diff options
| author | Mengjun Leng <quic_mengju@quicinc.com> | 2019-01-29 10:53:02 +0800 |
|---|---|---|
| committer | Semavi Ulusoy <doc.divxm@gmail.com> | 2022-09-13 01:01:38 +0300 |
| commit | db96f041f9de9228ed49efa3be6cff0a04d8931e (patch) | |
| tree | 83e8f00e6d08bbfcaa3cac526a88ee8508ac5ebe | |
| parent | f70a5328dbaababa2cd0b5d2f0abe5fdf8895c91 (diff) | |
Fix Dialer memory leaks
Close the cursor properly to avoid memory leak.
Bug: 69641622
Change-Id: Ieb1bceb67d0d89ef77382050500d5cd5c10fba0e
Signed-off-by: DennySPB <dennyspb@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
| -rw-r--r-- | java/com/android/dialer/blocking/FilteredNumberAsyncQueryHandler.java | 108 |
1 files changed, 65 insertions, 43 deletions
diff --git a/java/com/android/dialer/blocking/FilteredNumberAsyncQueryHandler.java b/java/com/android/dialer/blocking/FilteredNumberAsyncQueryHandler.java index 08526ef76..7323606fd 100644 --- a/java/com/android/dialer/blocking/FilteredNumberAsyncQueryHandler.java +++ b/java/com/android/dialer/blocking/FilteredNumberAsyncQueryHandler.java @@ -98,7 +98,13 @@ public class FilteredNumberAsyncQueryHandler extends AsyncQueryHandler { new Listener() { @Override protected void onQueryComplete(int token, Object cookie, Cursor cursor) { - listener.onHasBlockedNumbers(cursor != null && cursor.getCount() > 0); + try { + listener.onHasBlockedNumbers(cursor != null && cursor.getCount() > 0); + } finally { + if (cursor != null) { + cursor.close(); + } + } } }, FilteredNumberCompat.getContentUri(context, null), @@ -164,23 +170,29 @@ public class FilteredNumberAsyncQueryHandler extends AsyncQueryHandler { * example, both '16502530000' and '6502530000' can exist at the same time * and will be returned by this query. */ - if (cursor == null || cursor.getCount() == 0) { - blockedNumberCache.put(number, BLOCKED_NUMBER_CACHE_NULL_ID); - listener.onCheckComplete(null); - return; - } - cursor.moveToFirst(); - // New filtering doesn't have a concept of type - if (!FilteredNumberCompat.useNewFiltering(context) - && cursor.getInt(cursor.getColumnIndex(FilteredNumberColumns.TYPE)) - != FilteredNumberTypes.BLOCKED_NUMBER) { - blockedNumberCache.put(number, BLOCKED_NUMBER_CACHE_NULL_ID); - listener.onCheckComplete(null); - return; + try { + if (cursor == null || cursor.getCount() == 0) { + blockedNumberCache.put(number, BLOCKED_NUMBER_CACHE_NULL_ID); + listener.onCheckComplete(null); + return; + } + cursor.moveToFirst(); + // New filtering doesn't have a concept of type + if (!FilteredNumberCompat.useNewFiltering(context) + && cursor.getInt(cursor.getColumnIndex(FilteredNumberColumns.TYPE)) + != FilteredNumberTypes.BLOCKED_NUMBER) { + blockedNumberCache.put(number, BLOCKED_NUMBER_CACHE_NULL_ID); + listener.onCheckComplete(null); + return; + } + Integer blockedId = cursor.getInt(cursor.getColumnIndex(FilteredNumberColumns._ID)); + blockedNumberCache.put(number, blockedId); + listener.onCheckComplete(blockedId); + } finally { + if (cursor != null) { + cursor.close(); + } } - Integer blockedId = cursor.getInt(cursor.getColumnIndex(FilteredNumberColumns._ID)); - blockedNumberCache.put(number, blockedId); - listener.onCheckComplete(blockedId); } }, FilteredNumberCompat.getContentUri(context, null), @@ -221,9 +233,9 @@ public class FilteredNumberAsyncQueryHandler extends AsyncQueryHandler { if (TextUtils.isEmpty(formattedNumber)) { return null; } - - try (Cursor cursor = - context + Cursor cursor = null; + try { + cursor = context .getContentResolver() .query( FilteredNumberCompat.getContentUri(context, null), @@ -234,7 +246,7 @@ public class FilteredNumberAsyncQueryHandler extends AsyncQueryHandler { }), getIsBlockedNumberSelection(e164Number != null) + " = ?", new String[] {formattedNumber}, - null)) { + null); /* * In the frameworking blocking, numbers can be blocked in both e164 format * and not, resulting in multiple rows being returned for this query. For @@ -252,6 +264,10 @@ public class FilteredNumberAsyncQueryHandler extends AsyncQueryHandler { } catch (SecurityException e) { LogUtil.e("FilteredNumberAsyncQueryHandler.getBlockedIdSynchronous", null, e); return null; + } finally { + if (cursor != null) { + cursor.close(); + } } } @@ -349,29 +365,35 @@ public class FilteredNumberAsyncQueryHandler extends AsyncQueryHandler { new Listener() { @Override public void onQueryComplete(int token, Object cookie, Cursor cursor) { - int rowsReturned = cursor == null ? 0 : cursor.getCount(); - if (rowsReturned != 1) { - throw new SQLiteDatabaseCorruptException( - "Returned " + rowsReturned + " rows for uri " + uri + "where 1 expected."); - } - cursor.moveToFirst(); - final ContentValues values = new ContentValues(); - DatabaseUtils.cursorRowToContentValues(cursor, values); - values.remove(FilteredNumberCompat.getIdColumnName(context)); - - startDelete( - NO_TOKEN, - new Listener() { - @Override - public void onDeleteComplete(int token, Object cookie, int result) { - if (listener != null) { - listener.onUnblockComplete(result, values); + try { + int rowsReturned = cursor == null ? 0 : cursor.getCount(); + if (rowsReturned != 1) { + throw new SQLiteDatabaseCorruptException( + "Returned " + rowsReturned + " rows for uri " + uri + "where 1 expected."); + } + cursor.moveToFirst(); + final ContentValues values = new ContentValues(); + DatabaseUtils.cursorRowToContentValues(cursor, values); + values.remove(FilteredNumberCompat.getIdColumnName(context)); + + startDelete( + NO_TOKEN, + new Listener() { + @Override + public void onDeleteComplete(int token, Object cookie, int result) { + if (listener != null) { + listener.onUnblockComplete(result, values); + } } - } - }, - uri, - null, - null); + }, + uri, + null, + null); + } finally { + if (cursor != null) { + cursor.close(); + } + } } }, uri, |
