diff options
| author | Makoto Onuki <omakoto@google.com> | 2010-02-22 13:26:59 -0800 |
|---|---|---|
| committer | Makoto Onuki <omakoto@google.com> | 2010-02-22 17:27:57 -0800 |
| commit | 2f6a01858bea6c669039b0b1e10aa65fc73c7256 (patch) | |
| tree | 7c4311ce72df2005c6a4b5b3ac567526260badca | |
| parent | 469888fe84f48febbe8a1c1ade455ffeac828079 (diff) | |
| download | frameworks_base-2f6a01858bea6c669039b0b1e10aa65fc73c7256.zip frameworks_base-2f6a01858bea6c669039b0b1e10aa65fc73c7256.tar.gz frameworks_base-2f6a01858bea6c669039b0b1e10aa65fc73c7256.tar.bz2 | |
Fix bug 2183276: Synchronize all mManagedCursors accesses.
| -rw-r--r-- | core/java/android/app/Activity.java | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 05bbf3b..b38aeda 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -1308,14 +1308,16 @@ public class Activity extends ContextThemeWrapper } // close any cursors we are managing. - int numCursors = mManagedCursors.size(); - for (int i = 0; i < numCursors; i++) { - ManagedCursor c = mManagedCursors.get(i); - if (c != null) { - c.mCursor.close(); + synchronized (mManagedCursors) { + int numCursors = mManagedCursors.size(); + for (int i = 0; i < numCursors; i++) { + ManagedCursor c = mManagedCursors.get(i); + if (c != null) { + c.mCursor.close(); + } } + mManagedCursors.clear(); } - mManagedCursors.clear(); } /** @@ -3778,13 +3780,15 @@ public class Activity extends ContextThemeWrapper } final void performRestart() { - final int N = mManagedCursors.size(); - for (int i=0; i<N; i++) { - ManagedCursor mc = mManagedCursors.get(i); - if (mc.mReleased || mc.mUpdated) { - mc.mCursor.requery(); - mc.mReleased = false; - mc.mUpdated = false; + synchronized (mManagedCursors) { + final int N = mManagedCursors.size(); + for (int i=0; i<N; i++) { + ManagedCursor mc = mManagedCursors.get(i); + if (mc.mReleased || mc.mUpdated) { + mc.mCursor.requery(); + mc.mReleased = false; + mc.mUpdated = false; + } } } @@ -3850,12 +3854,14 @@ public class Activity extends ContextThemeWrapper " did not call through to super.onStop()"); } - final int N = mManagedCursors.size(); - for (int i=0; i<N; i++) { - ManagedCursor mc = mManagedCursors.get(i); - if (!mc.mReleased) { - mc.mCursor.deactivate(); - mc.mReleased = true; + synchronized (mManagedCursors) { + final int N = mManagedCursors.size(); + for (int i=0; i<N; i++) { + ManagedCursor mc = mManagedCursors.get(i); + if (!mc.mReleased) { + mc.mCursor.deactivate(); + mc.mReleased = true; + } } } |
