Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c13c7f98 authored by Hisanobu Watanabe's avatar Hisanobu Watanabe Committed by android-build-merger
Browse files

Merge "VPN reconnection fails after manually disabling VPN" am: ba17ea75 am:...

Merge "VPN reconnection fails after manually disabling VPN" am: ba17ea75 am: 92d16f70 am: f9c48fad
am: d521b10c

Change-Id: I315ce05d3563cb167177e3908709950300591405
parents 55b6e279 d521b10c
Loading
Loading
Loading
Loading
+26 −34
Original line number Diff line number Diff line
@@ -1586,9 +1586,6 @@ public class Vpn {
        public void exit() {
            // We assume that everything is reset after stopping the daemons.
            interrupt();
            for (LocalSocket socket : mSockets) {
                IoUtils.closeQuietly(socket);
            }
            agentDisconnect();
            try {
                mContext.unregisterReceiver(mBroadcastReceiver);
@@ -1601,8 +1598,26 @@ public class Vpn {
            Log.v(TAG, "Waiting");
            synchronized (TAG) {
                Log.v(TAG, "Executing");
                try {
                    execute();
                    monitorDaemons();
                    interrupted(); // Clear interrupt flag if execute called exit.
                } catch (InterruptedException e) {
                } finally {
                    for (LocalSocket socket : mSockets) {
                        IoUtils.closeQuietly(socket);
                    }
                    // This sleep is necessary for racoon to successfully complete sending delete
                    // message to server.
                    try {
                        Thread.sleep(50);
                    } catch (InterruptedException e) {
                    }
                    for (String daemon : mDaemons) {
                        SystemService.stop(daemon);
                    }
                }
                agentDisconnect();
            }
        }

@@ -1801,18 +1816,6 @@ public class Vpn {
                Log.i(TAG, "Aborting", e);
                updateState(DetailedState.FAILED, e.getMessage());
                exit();
            } finally {
                // Kill the daemons if they fail to stop.
                if (!initFinished) {
                    for (String daemon : mDaemons) {
                        SystemService.stop(daemon);
                    }
                }

                // Do not leave an unstable state.
                if (!initFinished || mNetworkInfo.getDetailedState() == DetailedState.CONNECTING) {
                    agentDisconnect();
                }
            }
        }

@@ -1820,12 +1823,10 @@ public class Vpn {
         * Monitor the daemons we started, moving to disconnected state if the
         * underlying services fail.
         */
        private void monitorDaemons() {
        private void monitorDaemons() throws InterruptedException{
            if (!mNetworkInfo.isConnected()) {
                return;
            }

            try {
            while (true) {
                Thread.sleep(2000);
                for (int i = 0; i < mDaemons.length; i++) {
@@ -1834,15 +1835,6 @@ public class Vpn {
                    }
                }
            }
            } catch (InterruptedException e) {
                Log.d(TAG, "interrupted during monitorDaemons(); stopping services");
            } finally {
                for (String daemon : mDaemons) {
                    SystemService.stop(daemon);
                }

                agentDisconnect();
            }
        }
    }
}