summaryrefslogtreecommitdiff
path: root/services/java/com/android/server/NetworkManagementService.java
diff options
context:
space:
mode:
authorRobert Greenwalt <rgreenwalt@google.com>2010-09-23 09:40:20 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2010-09-23 09:40:20 -0700
commit35dcaece115e2f8e227c2e579d38c42b65ead85e (patch)
treef82fc685865c90dd152858db15b5e08c4c0ba18a /services/java/com/android/server/NetworkManagementService.java
parent27a835f8d8faf962d978cf7e1e3b562fa0715d60 (diff)
parent9c38a6dc13ba55fccb9c66f347307a1b4ae68105 (diff)
am 9c38a6dc: am e87ebb08: Merge "Cleanup Netd to prevent getting hung." into gingerbread
Merge commit '9c38a6dc13ba55fccb9c66f347307a1b4ae68105' * commit '9c38a6dc13ba55fccb9c66f347307a1b4ae68105': Cleanup Netd to prevent getting hung.
Diffstat (limited to 'services/java/com/android/server/NetworkManagementService.java')
-rw-r--r--services/java/com/android/server/NetworkManagementService.java31
1 files changed, 26 insertions, 5 deletions
diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java
index de459ab9a419..05abd99025b6 100644
--- a/services/java/com/android/server/NetworkManagementService.java
+++ b/services/java/com/android/server/NetworkManagementService.java
@@ -47,6 +47,7 @@ import java.lang.IllegalStateException;
import java.net.InetAddress;
import java.net.UnknownHostException;
+import java.util.concurrent.CountDownLatch;
/**
* @hide
@@ -54,7 +55,7 @@ import java.net.UnknownHostException;
class NetworkManagementService extends INetworkManagementService.Stub {
private static final String TAG = "NetworkManagmentService";
-
+ private static final boolean DBG = true;
private static final String NETD_TAG = "NetdConnector";
class NetdResponseCode {
@@ -86,6 +87,9 @@ class NetworkManagementService extends INetworkManagementService.Stub {
*/
private NativeDaemonConnector mConnector;
+ private Thread mThread;
+ private final CountDownLatch mConnectedSignal = new CountDownLatch(1);
+
private ArrayList<INetworkManagementEventObserver> mObservers;
/**
@@ -93,9 +97,8 @@ class NetworkManagementService extends INetworkManagementService.Stub {
*
* @param context Binder context for this service
*/
- public NetworkManagementService(Context context) {
+ private NetworkManagementService(Context context) {
mContext = context;
-
mObservers = new ArrayList<INetworkManagementEventObserver>();
if ("simulator".equals(SystemProperties.get("ro.product.device"))) {
@@ -104,8 +107,17 @@ class NetworkManagementService extends INetworkManagementService.Stub {
mConnector = new NativeDaemonConnector(
new NetdCallbackReceiver(), "netd", 10, NETD_TAG);
- Thread thread = new Thread(mConnector, NETD_TAG);
- thread.start();
+ mThread = new Thread(mConnector, NETD_TAG);
+ }
+
+ public static NetworkManagementService create(Context context) throws InterruptedException {
+ NetworkManagementService service = new NetworkManagementService(context);
+ if (DBG) Slog.d(TAG, "Creating NetworkManagementService");
+ service.mThread.start();
+ if (DBG) Slog.d(TAG, "Awaiting socket connection");
+ service.mConnectedSignal.await();
+ if (DBG) Slog.d(TAG, "Connected");
+ return service;
}
public void registerObserver(INetworkManagementEventObserver obs) {
@@ -157,6 +169,14 @@ class NetworkManagementService extends INetworkManagementService.Stub {
}
}
+ /**
+ * Let us know the daemon is connected
+ */
+ protected void onConnected() {
+ if (DBG) Slog.d(TAG, "onConnected");
+ mConnectedSignal.countDown();
+ }
+
//
// Netd Callback handling
@@ -164,6 +184,7 @@ class NetworkManagementService extends INetworkManagementService.Stub {
class NetdCallbackReceiver implements INativeDaemonConnectorCallbacks {
public void onDaemonConnected() {
+ NetworkManagementService.this.onConnected();
new Thread() {
public void run() {
}