diff --git a/core/java/android/os/ZygoteProcess.java b/core/java/android/os/ZygoteProcess.java index 3cb5c60259ebc..0b6a99b0ae98e 100644 --- a/core/java/android/os/ZygoteProcess.java +++ b/core/java/android/os/ZygoteProcess.java @@ -73,6 +73,8 @@ public class ZygoteProcess { private static final int ZYGOTE_CONNECT_TIMEOUT_MS = 20000; + private static final int APPLICATION_ZYGOTE_READ_TIMEOUT_MS = 5000; + /** * Use a relatively short delay, because for app zygote, this is in the critical path of * service launch. @@ -1109,6 +1111,9 @@ public class ZygoteProcess { state.mZygoteOutputWriter.flush(); + // The system_server should not be blocked by a defective or bad application zygote. + state.mZygoteSessionSocket.setSoTimeout(APPLICATION_ZYGOTE_READ_TIMEOUT_MS); + return (state.mZygoteInputStream.readInt() == 0); } }