summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMengjun Leng <quic_mengju@quicinc.com>2019-01-29 10:53:02 +0800
committerSemavi Ulusoy <doc.divxm@gmail.com>2022-09-13 01:01:38 +0300
commitdb96f041f9de9228ed49efa3be6cff0a04d8931e (patch)
tree83e8f00e6d08bbfcaa3cac526a88ee8508ac5ebe
parentf70a5328dbaababa2cd0b5d2f0abe5fdf8895c91 (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.java108
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,