summaryrefslogtreecommitdiffstats
path: root/services/java/com/android/server/NetworkManagementService.java
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2011-08-09 21:44:24 -0700
committerJeff Sharkey <jsharkey@android.com>2011-08-10 13:42:01 -0700
commitfa23c5ae226c1a1d39f89c5c87d4f340e91d90e0 (patch)
tree35bec63fb99988203d4bf4594d850c0b8fa98cac /services/java/com/android/server/NetworkManagementService.java
parent8cceb1e42b76aabcd6c27cfe599f7cd251a84947 (diff)
downloadframeworks_base-fa23c5ae226c1a1d39f89c5c87d4f340e91d90e0.zip
frameworks_base-fa23c5ae226c1a1d39f89c5c87d4f340e91d90e0.tar.gz
frameworks_base-fa23c5ae226c1a1d39f89c5c87d4f340e91d90e0.tar.bz2
Add NativeDaemonConnector users to watchdog.
To catch instances where NativeDaemonConnector hangs while executing commands, add users to system_server watchdog. Also moved qtaguid enabler to separate thread to prevent blocking systemReady(). Bug: 5145437 Change-Id: I4c6c1dc09864a1c05f9486a31faa1b366548e911
Diffstat (limited to 'services/java/com/android/server/NetworkManagementService.java')
-rw-r--r--services/java/com/android/server/NetworkManagementService.java27
1 files changed, 17 insertions, 10 deletions
diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java
index cb5e968..abb780b 100644
--- a/services/java/com/android/server/NetworkManagementService.java
+++ b/services/java/com/android/server/NetworkManagementService.java
@@ -68,7 +68,7 @@ import libcore.io.IoUtils;
/**
* @hide
*/
-class NetworkManagementService extends INetworkManagementService.Stub {
+class NetworkManagementService extends INetworkManagementService.Stub implements Watchdog.Monitor {
private static final String TAG = "NetworkManagementService";
private static final boolean DBG = false;
private static final String NETD_TAG = "NetdConnector";
@@ -139,7 +139,7 @@ class NetworkManagementService extends INetworkManagementService.Stub {
/** Set of UIDs with active reject rules. */
private SparseBooleanArray mUidRejectOnQuota = new SparseBooleanArray();
- private boolean mBandwidthControlEnabled;
+ private volatile boolean mBandwidthControlEnabled;
/**
* Constructs a new NetworkManagementService instance
@@ -162,6 +162,9 @@ class NetworkManagementService extends INetworkManagementService.Stub {
mConnector = new NativeDaemonConnector(
new NetdCallbackReceiver(), "netd", 10, NETD_TAG);
mThread = new Thread(mConnector, NETD_TAG);
+
+ // Add ourself to the Watchdog monitors.
+ Watchdog.getInstance().addMonitor(this);
}
public static NetworkManagementService create(Context context) throws InterruptedException {
@@ -185,14 +188,12 @@ class NetworkManagementService extends INetworkManagementService.Stub {
}
public void systemReady() {
-
// only enable bandwidth control when support exists, and requested by
// system setting.
final boolean hasKernelSupport = new File("/proc/net/xt_qtaguid/ctrl").exists();
final boolean shouldEnable =
Settings.Secure.getInt(mContext.getContentResolver(), NETSTATS_ENABLED, 1) != 0;
- mBandwidthControlEnabled = false;
if (hasKernelSupport && shouldEnable) {
Slog.d(TAG, "enabling bandwidth control");
try {
@@ -288,7 +289,7 @@ class NetworkManagementService extends INetworkManagementService.Stub {
/**
* Let us know the daemon is connected
*/
- protected void onConnected() {
+ protected void onDaemonConnected() {
if (DBG) Slog.d(TAG, "onConnected");
mConnectedSignal.countDown();
}
@@ -299,13 +300,12 @@ class NetworkManagementService extends INetworkManagementService.Stub {
//
class NetdCallbackReceiver implements INativeDaemonConnectorCallbacks {
+ /** {@inheritDoc} */
public void onDaemonConnected() {
- NetworkManagementService.this.onConnected();
- new Thread() {
- public void run() {
- }
- }.start();
+ NetworkManagementService.this.onDaemonConnected();
}
+
+ /** {@inheritDoc} */
public boolean onEvent(int code, String raw, String[] cooked) {
switch (code) {
case NetdResponseCode.InterfaceChange:
@@ -1520,4 +1520,11 @@ class NetworkManagementService extends INetworkManagementService.Stub {
"Error communicating with native daemon to flush interface " + iface, e);
}
}
+
+ /** {@inheritDoc} */
+ public void monitor() {
+ if (mConnector != null) {
+ mConnector.monitor();
+ }
+ }
}