Fix VpnSettings.StatusChecker.start()
to avoid multiple threads checking status at the same time.
diff --git a/src/com/android/settings/vpn/AuthenticationActor.java b/src/com/android/settings/vpn/AuthenticationActor.java
index 2584fbd..a05cfa7 100644
--- a/src/com/android/settings/vpn/AuthenticationActor.java
+++ b/src/com/android/settings/vpn/AuthenticationActor.java
@@ -195,8 +195,8 @@
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 08dd8dd..1446164 100644
--- a/src/com/android/settings/vpn/VpnSettings.java
+++ b/src/com/android/settings/vpn/VpnSettings.java
@@ -932,7 +932,7 @@
// managing status check in a background thread
private class StatusChecker {
private Set<VpnProfile> mQueue = new HashSet<VpnProfile>();
- private boolean mPaused;
+ private boolean mPaused = true;
private ConditionVariable mThreadCv = new ConditionVariable();
void onPause() {
@@ -941,7 +941,6 @@
}
synchronized void onResume() {
- mPaused = false;
start();
}
@@ -961,7 +960,9 @@
return p;
}
- private void start() {
+ private synchronized void start() {
+ if (!mPaused) return;
+ mPaused = false;
mThreadCv.close();
new Thread(new Runnable() {
public void run() {