diff options
author | Jorim Jaggi <jjaggi@google.com> | 2015-08-28 11:46:10 -0700 |
---|---|---|
committer | Jorim Jaggi <jjaggi@google.com> | 2015-08-28 22:08:03 +0000 |
commit | acace94c1739b08ea72dc6c2f49cf29bce6c1dac (patch) | |
tree | 2836adea0b493d79f6665b797d5f993c8176da83 /packages/SystemUI | |
parent | 96990d0cdd7f7757ba16b927766854e0dc6fa994 (diff) | |
download | frameworks_base-acace94c1739b08ea72dc6c2f49cf29bce6c1dac.zip frameworks_base-acace94c1739b08ea72dc6c2f49cf29bce6c1dac.tar.gz frameworks_base-acace94c1739b08ea72dc6c2f49cf29bce6c1dac.tar.bz2 |
Fix race condition by guarding callbacks
Bug: 23587553
Change-Id: Ia71760013f3acbb5aeb4e30bb716683c9c672742
Diffstat (limited to 'packages/SystemUI')
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java index 6af9854..1595d0d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java @@ -36,6 +36,7 @@ import android.text.TextUtils; import android.util.Log; import android.util.SparseArray; +import com.android.internal.annotations.GuardedBy; import com.android.internal.net.LegacyVpnInfo; import com.android.internal.net.VpnConfig; import com.android.internal.net.VpnInfo; @@ -62,8 +63,9 @@ public class SecurityControllerImpl implements SecurityController { private final IConnectivityManager mConnectivityManagerService; private final DevicePolicyManager mDevicePolicyManager; private final UserManager mUserManager; - private final ArrayList<SecurityControllerCallback> mCallbacks - = new ArrayList<SecurityControllerCallback>(); + + @GuardedBy("mCallbacks") + private final ArrayList<SecurityControllerCallback> mCallbacks = new ArrayList<>(); private SparseArray<VpnConfig> mCurrentVpns = new SparseArray<>(); private int mCurrentUserId; @@ -161,16 +163,20 @@ public class SecurityControllerImpl implements SecurityController { @Override public void removeCallback(SecurityControllerCallback callback) { - if (callback == null) return; - if (DEBUG) Log.d(TAG, "removeCallback " + callback); - mCallbacks.remove(callback); + synchronized (mCallbacks) { + if (callback == null) return; + if (DEBUG) Log.d(TAG, "removeCallback " + callback); + mCallbacks.remove(callback); + } } @Override public void addCallback(SecurityControllerCallback callback) { - if (callback == null || mCallbacks.contains(callback)) return; - if (DEBUG) Log.d(TAG, "addCallback " + callback); - mCallbacks.add(callback); + synchronized (mCallbacks) { + if (callback == null || mCallbacks.contains(callback)) return; + if (DEBUG) Log.d(TAG, "addCallback " + callback); + mCallbacks.add(callback); + } } @Override @@ -202,8 +208,10 @@ public class SecurityControllerImpl implements SecurityController { } private void fireCallbacks() { - for (SecurityControllerCallback callback : mCallbacks) { - callback.onStateChanged(); + synchronized (mCallbacks) { + for (SecurityControllerCallback callback : mCallbacks) { + callback.onStateChanged(); + } } } |