diff options
| author | 2016-05-03 15:58:01 -0700 | |
|---|---|---|
| committer | 2016-05-08 07:56:59 -0700 | |
| commit | 07cc3bb04081b8ad836f16abb7644a626fc47bae (patch) | |
| tree | c6ec6cc9593307d5f02400b0d73c70cb4a25de2b | |
| parent | 27c279d5c8f0c237c4b95bffebbfe2ca4b5b8d75 (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.java | 18 |
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(); } }); |