summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author bohu <bohu@google.com> 2016-05-03 15:58:01 -0700
committer bohu <bohu@google.com> 2016-05-08 07:56:59 -0700
commit07cc3bb04081b8ad836f16abb7644a626fc47bae (patch)
treec6ec6cc9593307d5f02400b0d73c70cb4a25de2b
parent27c279d5c8f0c237c4b95bffebbfe2ca4b5b8d75 (diff)
Ensure Netd Service is alive
At least on android TV emulator system image, the Netd service could be null when the setDnsConfigurationForNetwork is invoked. bug: 28553503 Change-Id: If059495c8573ede287c4e9d8f343318d519fca7f
-rw-r--r--services/core/java/com/android/server/NetworkManagementService.java18
1 files changed, 13 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java
index 2418160255f8..e5b301e803af 100644
--- a/services/core/java/com/android/server/NetworkManagementService.java
+++ b/services/core/java/com/android/server/NetworkManagementService.java
@@ -330,6 +330,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub
if (DBG) Slog.d(TAG, "Awaiting socket connection");
connectedSignal.await();
if (DBG) Slog.d(TAG, "Connected");
+ service.connectNativeNetdService();
return service;
}
@@ -560,11 +561,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub
}
}
- /**
- * Prepare native daemon once connected, enabling modules and pushing any
- * existing in-memory rules.
- */
- private void prepareNativeDaemon() {
+ private void connectNativeNetdService() {
boolean nativeServiceAvailable = false;
try {
mNetdService = INetd.Stub.asInterface(ServiceManager.getService(NETD_SERVICE_NAME));
@@ -573,6 +570,13 @@ public class NetworkManagementService extends INetworkManagementService.Stub
if (!nativeServiceAvailable) {
Slog.wtf(TAG, "Can't connect to NativeNetdService " + NETD_SERVICE_NAME);
}
+ }
+
+ /**
+ * Prepare native daemon once connected, enabling modules and pushing any
+ * existing in-memory rules.
+ */
+ private void prepareNativeDaemon() {
mBandwidthControlEnabled = false;
@@ -767,12 +771,16 @@ public class NetworkManagementService extends INetworkManagementService.Stub
// event is dispatched from internal NDC thread, so we prepare the
// daemon back on main thread.
if (mConnectedSignal != null) {
+ // The system is booting and we're connecting to netd for the first time.
mConnectedSignal.countDown();
mConnectedSignal = null;
} else {
+ // We're reconnecting to netd after the socket connection
+ // was interrupted (e.g., if it crashed).
mFgHandler.post(new Runnable() {
@Override
public void run() {
+ connectNativeNetdService();
prepareNativeDaemon();
}
});