From fe0b0178cb2d24b8e6e1477055617bbf86a0808b Mon Sep 17 00:00:00 2001 From: Hung-ying Tyan Date: Mon, 13 Jul 2009 17:23:32 +0800 Subject: [PATCH] Fix VpnSettings.StatusChecker.start() to avoid multiple threads checking status at the same time. --- src/com/android/settings/vpn/AuthenticationActor.java | 2 +- src/com/android/settings/vpn/VpnSettings.java | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/vpn/AuthenticationActor.java b/src/com/android/settings/vpn/AuthenticationActor.java index 2584fbd1d77..a05cfa72442 100644 --- a/src/com/android/settings/vpn/AuthenticationActor.java +++ b/src/com/android/settings/vpn/AuthenticationActor.java @@ -195,8 +195,8 @@ public class AuthenticationActor implements VpnProfileActor { if (bindService(c)) { // wait for a second, let status propagate wait(c, ONE_SECOND); + mContext.unbindService(c); } - mContext.unbindService(c); } private boolean bindService(ServiceConnection c) { diff --git a/src/com/android/settings/vpn/VpnSettings.java b/src/com/android/settings/vpn/VpnSettings.java index 08dd8dd1cb3..14461647e89 100644 --- a/src/com/android/settings/vpn/VpnSettings.java +++ b/src/com/android/settings/vpn/VpnSettings.java @@ -932,7 +932,7 @@ public class VpnSettings extends PreferenceActivity implements // managing status check in a background thread private class StatusChecker { private Set mQueue = new HashSet(); - private boolean mPaused; + private boolean mPaused = true; private ConditionVariable mThreadCv = new ConditionVariable(); void onPause() { @@ -941,7 +941,6 @@ public class VpnSettings extends PreferenceActivity implements } synchronized void onResume() { - mPaused = false; start(); } @@ -961,7 +960,9 @@ public class VpnSettings extends PreferenceActivity implements return p; } - private void start() { + private synchronized void start() { + if (!mPaused) return; + mPaused = false; mThreadCv.close(); new Thread(new Runnable() { public void run() {