diff options
Diffstat (limited to 'core/java/android/content')
-rw-r--r-- | core/java/android/content/ContentResolver.java | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java index 1e72092..0d25926 100644 --- a/core/java/android/content/ContentResolver.java +++ b/core/java/android/content/ContentResolver.java @@ -16,6 +16,8 @@ package android.content; +import dalvik.system.CloseGuard; + import android.accounts.Account; import android.app.ActivityManagerNative; import android.app.ActivityThread; @@ -33,6 +35,7 @@ import android.os.IBinder; import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.os.ServiceManager; +import android.os.StrictMode; import android.os.SystemClock; import android.text.TextUtils; import android.util.EventLog; @@ -1562,27 +1565,39 @@ public abstract class ContentResolver { private final class CursorWrapperInner extends CursorWrapper { private final IContentProvider mContentProvider; public static final String TAG="CursorWrapperInner"; - private boolean mCloseFlag = false; + + private final CloseGuard mCloseGuard = CloseGuard.get(); + private boolean mProviderReleased; CursorWrapperInner(Cursor cursor, IContentProvider icp) { super(cursor); mContentProvider = icp; + mCloseGuard.open("close"); } @Override public void close() { super.close(); ContentResolver.this.releaseProvider(mContentProvider); - mCloseFlag = true; + mProviderReleased = true; + + if (mCloseGuard != null) { + mCloseGuard.close(); + } } @Override protected void finalize() throws Throwable { - // TODO: integrate CloseGuard support. try { - if(!mCloseFlag) { + if (mCloseGuard != null) { + mCloseGuard.warnIfOpen(); + } + + if (!mProviderReleased && mContentProvider != null) { + // Even though we are using CloseGuard, log this anyway so that + // application developers always see the message in the log. Log.w(TAG, "Cursor finalized without prior close()"); - close(); + ContentResolver.this.releaseProvider(mContentProvider); } } finally { super.finalize(); |