diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java index 7c3cab17704fc..20ffd9f51d6e5 100644 --- a/services/core/java/com/android/server/connectivity/Vpn.java +++ b/services/core/java/com/android/server/connectivity/Vpn.java @@ -2563,7 +2563,7 @@ public class Vpn { public void exitIfOuterInterfaceIs(String interfaze) { if (interfaze.equals(mOuterInterface)) { Log.i(TAG, "Legacy VPN is going down with " + interfaze); - exit(); + exitVpnRunner(); } } @@ -2572,6 +2572,10 @@ public class Vpn { public void exitVpnRunner() { // We assume that everything is reset after stopping the daemons. interrupt(); + + // Always disconnect. This may be called again in cleanupVpnStateLocked() if + // exitVpnRunner() was called from exit(), but it will be a no-op. + agentDisconnect(); try { mContext.unregisterReceiver(mBroadcastReceiver); } catch (IllegalArgumentException e) {} @@ -2794,7 +2798,7 @@ public class Vpn { } catch (Exception e) { Log.i(TAG, "Aborting", e); updateState(DetailedState.FAILED, e.getMessage()); - exit(); + exitVpnRunner(); } }