OSDN Git Service

Catch ServiceSpecificException instead of IllegalStateException.
authorLorenzo Colitti <lorenzo@google.com>
Wed, 27 Feb 2019 01:35:10 +0000 (10:35 +0900)
committerLorenzo Colitti <lorenzo@google.com>
Wed, 27 Feb 2019 09:21:22 +0000 (18:21 +0900)
The old NetworkManagementService methods to start clatd threw
IllegalStateException, but the new netd methods throw
ServiceSpecificException. Update the catch clauses so that if
starting clatd fails, the system doesn't crash.

Also stop logging stack traces but only include the exception
message itself.

Bug: 65674744
Test: atest FrameworksNetTests
Test: connecting/disconnecting to v6-only wifi in a loop does not crash
Change-Id: I4a9ec7f104712fbbe08f4f67e3288df03e8ed873

services/core/java/com/android/server/connectivity/Nat464Xlat.java

index 2ae14a9..2646d76 100644 (file)
@@ -175,8 +175,8 @@ public class Nat464Xlat extends BaseNetworkObserver {
         String addrStr = null;
         try {
             addrStr = mNetd.clatdStart(baseIface, mNat64Prefix.toString());
-        } catch (RemoteException | IllegalStateException e) {
-            Slog.e(TAG, "Error starting clatd on " + baseIface, e);
+        } catch (RemoteException | ServiceSpecificException e) {
+            Slog.e(TAG, "Error starting clatd on " + baseIface + ": " + e);
         }
         mIface = CLAT_PREFIX + baseIface;
         mBaseIface = baseIface;
@@ -203,7 +203,7 @@ public class Nat464Xlat extends BaseNetworkObserver {
         try {
             mNMService.unregisterObserver(this);
         } catch (RemoteException | IllegalStateException e) {
-            Slog.e(TAG, "Error unregistering clatd observer on " + mBaseIface, e);
+            Slog.e(TAG, "Error unregistering clatd observer on " + mBaseIface + ": " + e);
         }
         mIface = null;
         mBaseIface = null;
@@ -248,8 +248,8 @@ public class Nat464Xlat extends BaseNetworkObserver {
         Slog.i(TAG, "Stopping clatd on " + mBaseIface);
         try {
             mNetd.clatdStop(mBaseIface);
-        } catch (RemoteException | IllegalStateException e) {
-            Slog.e(TAG, "Error stopping clatd on " + mBaseIface, e);
+        } catch (RemoteException | ServiceSpecificException e) {
+            Slog.e(TAG, "Error stopping clatd on " + mBaseIface + ": " + e);
         }
 
         String iface = mIface;
@@ -272,7 +272,7 @@ public class Nat464Xlat extends BaseNetworkObserver {
             mNetd.resolverStartPrefix64Discovery(getNetId());
             mState = State.DISCOVERING;
         } catch (RemoteException | ServiceSpecificException e) {
-            Slog.e(TAG, "Error starting prefix discovery on netId " + getNetId(), e);
+            Slog.e(TAG, "Error starting prefix discovery on netId " + getNetId() + ": " + e);
         }
     }
 
@@ -280,7 +280,7 @@ public class Nat464Xlat extends BaseNetworkObserver {
         try {
             mNetd.resolverStopPrefix64Discovery(getNetId());
         } catch (RemoteException | ServiceSpecificException e) {
-            Slog.e(TAG, "Error stopping prefix discovery on netId " + getNetId(), e);
+            Slog.e(TAG, "Error stopping prefix discovery on netId " + getNetId() + ": " + e);
         }
     }