OSDN Git Service

Fixes for stupid mistakes (by me).
authorSreeram Ramachandran <sreeram@google.com>
Thu, 24 Apr 2014 22:55:26 +0000 (15:55 -0700)
committerLorenzo Colitti <lorenzo@google.com>
Wed, 14 May 2014 09:45:06 +0000 (02:45 -0700)
+ Only remove netId/permission after doing everything that references them.
+ Return success/failure correctly based on return value of fork/exec.

Conflicts:
NetworkController.cpp

Change-Id: Iddb8ccdffc104ffed1058ecc2421006beebd568d

NetworkController.cpp
RouteController.cpp

index 395798d..93e1c1b 100644 (file)
@@ -183,8 +183,6 @@ bool NetworkController::destroyNetwork(unsigned netId) {
             status = false;
         }
     }
-    mPermissionsController->setPermissionForNetwork(PERMISSION_NONE, netId);
-    mNetIdToInterfaces.erase(netId);
 
     if (netId == getDefaultNetwork()) {
         // Could the default network have changed from below us, after we evaluated the 'if', making
@@ -194,6 +192,9 @@ bool NetworkController::destroyNetwork(unsigned netId) {
         setDefaultNetwork(NETID_UNSET);
     }
 
+    mPermissionsController->setPermissionForNetwork(PERMISSION_NONE, netId);
+    mNetIdToInterfaces.erase(netId);
+
 // TODO: Uncomment once this API has been added to bionic.
 #if 0
     _resolv_delete_cache_for_net(netId);
index 2a6ef3d..e3bbef4 100644 (file)
@@ -115,7 +115,7 @@ bool runIpRouteCommand(const char* action, uint32_t table, const char* interface
         }
     }
 
-    return android_fork_execvp(argc, const_cast<char**>(argv), NULL, false, false);
+    return !android_fork_execvp(argc, const_cast<char**>(argv), NULL, false, false);
 }
 
 bool modifyPerNetworkRules(unsigned netId, const char* interface, Permission permission, bool add,