From 7c435f6b441cfc281f77d2467a58a85a4167ffcd Mon Sep 17 00:00:00 2001 From: Fabrice Di Meglio Date: Tue, 29 Jul 2014 16:02:22 -0700 Subject: [PATCH] Fix bug #16660405 Stability: ISE in Settings: Observer ... com.android.settings.SettingsPreferenceFragment$1@3c1d9ecb was not registered - use a monitor to control registering / unregistering Change-Id: Id66dd698abf92643c97938e2091c3be38e6b78bd --- .../settings/SettingsPreferenceFragment.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java index 38344fb8234..f89b72eb29a 100644 --- a/src/com/android/settings/SettingsPreferenceFragment.java +++ b/src/com/android/settings/SettingsPreferenceFragment.java @@ -66,6 +66,7 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di private boolean mPreferenceHighlighted = false; private Drawable mHighlightDrawable; + private Object mRegisterLock = new Object(); private boolean mIsDataSetObserverRegistered = false; private DataSetObserver mDataSetObserver = new DataSetObserver() { @Override @@ -153,16 +154,20 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di } public void registerObserverIfNeeded() { - if (!mIsDataSetObserverRegistered) { - getPreferenceScreen().getRootAdapter().registerDataSetObserver(mDataSetObserver); - mIsDataSetObserverRegistered = true; + synchronized (mRegisterLock) { + if (!mIsDataSetObserverRegistered) { + getPreferenceScreen().getRootAdapter().registerDataSetObserver(mDataSetObserver); + mIsDataSetObserverRegistered = true; + } } } public void unregisterObserverIfNeeded() { - if (mIsDataSetObserverRegistered) { - getPreferenceScreen().getRootAdapter().unregisterDataSetObserver(mDataSetObserver); - mIsDataSetObserverRegistered = false; + synchronized (mRegisterLock) { + if (mIsDataSetObserverRegistered) { + getPreferenceScreen().getRootAdapter().unregisterDataSetObserver(mDataSetObserver); + mIsDataSetObserverRegistered = false; + } } }