OSDN Git Service

Fix for DNS resolutions when there is no default network set yet.
authorPaul Jensen <pauljensen@google.com>
Thu, 17 Apr 2014 19:02:32 +0000 (15:02 -0400)
committerPaul Jensen <pauljensen@google.com>
Thu, 17 Apr 2014 19:02:32 +0000 (15:02 -0400)
We need to determine the actual netId to use prior to comparing
it against the default netId.  Also initialize the default network
variable.

bug:13877665
Change-Id: I24c05eb006e2c93d5e0a9b94fee4da408089d2b8

DnsProxyListener.cpp
NetworkController.cpp

index 9b5c283..b76586b 100644 (file)
@@ -192,6 +192,8 @@ int DnsProxyListener::GetAddrInfoCmd::runCommand(SocketClient *cli,
     pid_t pid = cli->getPid();
     uid_t uid = cli->getUid();
 
+    netId = mNetCtrl->getNetwork(uid, netId, pid, true);
+
     if (ai_flags != -1 || ai_family != -1 ||
         ai_socktype != -1 || ai_protocol != -1) {
         hints = (struct addrinfo*) calloc(1, sizeof(struct addrinfo));
@@ -214,8 +216,6 @@ int DnsProxyListener::GetAddrInfoCmd::runCommand(SocketClient *cli,
              netId, pid, uid);
     }
 
-    netId = mNetCtrl->getNetwork(uid, netId, pid, true);
-
     cli->incRef();
     DnsProxyListener::GetAddrInfoHandler* handler =
             new DnsProxyListener::GetAddrInfoHandler(cli, name, service, hints, netId);
index a1f1535..2285b22 100644 (file)
@@ -22,7 +22,9 @@
 #include "NetworkController.h"
 
 // Mark 1 is reserved for SecondaryTableController::PROTECT_MARK.
-NetworkController::NetworkController() : mNextFreeNetId(10) {}
+NetworkController::NetworkController()
+        : mDefaultNetId(NETID_UNSET),
+          mNextFreeNetId(10) {}
 
 void NetworkController::clearNetworkPreference() {
     android::RWLock::AutoWLock lock(mRWLock);