From c050e7b9358ea252374388564d2fa325bb908883 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Fri, 16 May 2014 12:10:32 -0700 Subject: [PATCH] Stop clatd when starting the Nat464Xlat service. If a runtime restart happens while clatd was running, we try to start clatd, which causes a fatal exception because netd returns a 400 error (clatd already started. Bug: 13450716 Bug: 15012035 Change-Id: I102a06d6193fb5f4a1ebe5ad52e5647ff72ca0da --- .../com/android/server/connectivity/Nat464Xlat.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/connectivity/Nat464Xlat.java b/services/core/java/com/android/server/connectivity/Nat464Xlat.java index 3884ab057b..096ab66b42 100644 --- a/services/core/java/com/android/server/connectivity/Nat464Xlat.java +++ b/services/core/java/com/android/server/connectivity/Nat464Xlat.java @@ -74,6 +74,14 @@ public class Nat464Xlat extends BaseNetworkObserver { mIsStarted = false; mIsRunning = false; mLP = new LinkProperties(); + + // If this is a runtime restart, it's possible that clatd is already + // running, but we don't know about it. If so, stop it. + try { + if (mNMService.isClatdStarted()) { + mNMService.stopClatd(); + } + } catch(RemoteException e) {} // Well, we tried. } /** @@ -198,13 +206,13 @@ public class Nat464Xlat extends BaseNetworkObserver { NetworkUtils.resetConnections( CLAT_INTERFACE_NAME, NetworkUtils.RESET_IPV4_ADDRESSES); + mBaseLP.removeStackedLink(mLP); + updateConnectivityService(); } Slog.i(TAG, "interface " + CLAT_INTERFACE_NAME + " removed, mIsRunning = " + mIsRunning + " -> false"); mIsRunning = false; - mBaseLP.removeStackedLink(mLP); mLP.clear(); - updateConnectivityService(); Slog.i(TAG, "mLP = " + mLP); } }