Merge "requery() should close cursorwindow insead of setting it to null." into honeycomb

This commit is contained in:
Vasu Nori
2011-01-06 11:37:00 -08:00
committed by Android (Google) Code Review
2 changed files with 21 additions and 5 deletions

View File

@@ -154,7 +154,10 @@ public final class BulkCursorToCursorAdaptor extends AbstractWindowedCursor {
false /* the window will be accessed across processes */));
if (mCount != -1) {
mPos = -1;
mWindow = null;
if (mWindow != null) {
mWindow.close();
mWindow = null;
}
// super.requery() will call onChanged. Do it here instead of relying on the
// observer from the far side so that observers can see a correct value for mCount

View File

@@ -17,12 +17,14 @@
package android.database;
import android.content.res.Resources;
import android.database.sqlite.DatabaseObjectNotClosedException;
import android.database.sqlite.SQLiteClosable;
import android.os.Binder;
import android.os.IBinder;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Process;
import android.os.StrictMode;
import android.util.Log;
import android.util.SparseIntArray;
@@ -45,6 +47,7 @@ public class CursorWindow extends SQLiteClosable implements Parcelable {
private int nWindow;
private int mStartPos;
private final Throwable mStackTrace;
/**
* Creates a new empty window.
@@ -56,6 +59,7 @@ public class CursorWindow extends SQLiteClosable implements Parcelable {
int rslt = native_init(sCursorWindowSize, localWindow);
printDebugMsgIfError(rslt);
recordNewWindow(Binder.getCallingPid(), nWindow);
mStackTrace = new DatabaseObjectNotClosedException().fillInStackTrace();
}
private void printDebugMsgIfError(int rslt) {
@@ -561,7 +565,16 @@ public class CursorWindow extends SQLiteClosable implements Parcelable {
@Override
protected void finalize() {
// Just in case someone forgot to call close...
if (nWindow == 0) {
return;
}
if (StrictMode.vmSqliteObjectLeaksEnabled()) {
StrictMode.onSqliteObjectLeaked(
"Releasing cursor in a finalizer. Please ensure " +
"that you explicitly call close() on your cursor: ",
mStackTrace);
}
recordClosingOfWindow(nWindow);
close_native();
}
@@ -593,6 +606,7 @@ public class CursorWindow extends SQLiteClosable implements Parcelable {
IBinder nativeBinder = source.readStrongBinder();
mStartPos = source.readInt();
int rslt = native_init(nativeBinder);
mStackTrace = new DatabaseObjectNotClosedException().fillInStackTrace();
printDebugMsgIfError(rslt);
}
@@ -607,8 +621,7 @@ public class CursorWindow extends SQLiteClosable implements Parcelable {
@Override
protected void onAllReferencesReleased() {
int windowId = nWindow;
recordClosingOfWindow(Binder.getCallingPid(), nWindow);
recordClosingOfWindow(nWindow);
close_native();
}
@@ -623,7 +636,7 @@ public class CursorWindow extends SQLiteClosable implements Parcelable {
}
}
private void recordClosingOfWindow(int pid, int window) {
private void recordClosingOfWindow(int window) {
synchronized (sWindowToPidMap) {
if (sWindowToPidMap.size() == 0) {
// this means we are not in the ContentProvider.