Merge "Actually wait for installd" into mnc-dev
diff --git a/core/java/com/android/internal/os/InstallerConnection.java b/core/java/com/android/internal/os/InstallerConnection.java
index 671bf24..dcc6a5e 100644
--- a/core/java/com/android/internal/os/InstallerConnection.java
+++ b/core/java/com/android/internal/os/InstallerConnection.java
@@ -18,6 +18,7 @@
 
 import android.net.LocalSocket;
 import android.net.LocalSocketAddress;
+import android.os.SystemClock;
 import android.util.Slog;
 import libcore.io.IoUtils;
 import libcore.io.Streams;
@@ -206,4 +207,14 @@
         }
         return true;
     }
+
+    public void waitForConnection() {
+        for (;;) {
+            if (execute("ping") >= 0) {
+                return;
+            }
+            Slog.w(TAG, "installd not ready");
+            SystemClock.sleep(1000);
+        }
+    }
 }
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index 971da77..06919e1 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -468,6 +468,7 @@
     private static void performSystemServerDexOpt(String classPath) {
         final String[] classPathElements = classPath.split(":");
         final InstallerConnection installer = new InstallerConnection();
+        installer.waitForConnection();
         final String instructionSet = VMRuntime.getRuntime().vmInstructionSet();
 
         try {
diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java
index ef7be30..8dc4bd3 100644
--- a/services/core/java/com/android/server/pm/Installer.java
+++ b/services/core/java/com/android/server/pm/Installer.java
@@ -41,7 +41,7 @@
     @Override
     public void onStart() {
         Slog.i(TAG, "Waiting for installd to be ready.");
-        ping();
+        mInstaller.waitForConnection();
     }
 
     private static String escapeNull(String arg) {
@@ -310,14 +310,6 @@
         return mInstaller.execute(builder.toString());
     }
 
-    public boolean ping() {
-        if (mInstaller.execute("ping") < 0) {
-            return false;
-        } else {
-            return true;
-        }
-    }
-
     @Deprecated
     public int freeCache(long freeStorageSize) {
         return freeCache(null, freeStorageSize);