[Bugfix] Add reading timeout when waiting for the reply of an application zygote.

Some defective or bad application zygote processes may do much work or just sleep in their doPreload, which makes the ActivityManager:procStart thread of system_server blocked and the other applications can not start.

Test: manual

Change-Id: I5045718719a5f876e2a03b30f104096894c4c307
This commit is contained in:
xi yu
2022-12-19 08:27:33 +00:00
parent 91a15e8ad9
commit 78aae53eba

View File

@@ -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);
}
}