From c8a2cfed0192afc6a408f4bdb77e8a0bdd5d752b Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Tue, 23 Jun 2015 16:33:48 -0700 Subject: [PATCH] Actually wait for installd Bug 19337445 Change-Id: I70bdaa0ac3695ac9d03ba34fe9d35fe775a5300d --- .../com/android/internal/os/InstallerConnection.java | 11 +++++++++++ core/java/com/android/internal/os/ZygoteInit.java | 1 + .../core/java/com/android/server/pm/Installer.java | 10 +--------- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/core/java/com/android/internal/os/InstallerConnection.java b/core/java/com/android/internal/os/InstallerConnection.java index 671bf2444accd..dcc6a5e8cb33e 100644 --- a/core/java/com/android/internal/os/InstallerConnection.java +++ b/core/java/com/android/internal/os/InstallerConnection.java @@ -18,6 +18,7 @@ package com.android.internal.os; 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 @@ public class InstallerConnection { } 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 971da7727e7e1..06919e1a9f6b7 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -468,6 +468,7 @@ public class ZygoteInit { 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 ef7be30e4636e..8dc4bd3b32af6 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 @@ public final class Installer extends SystemService { @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 @@ public final class Installer extends SystemService { 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);