From 1ef8aef260c19236be023c429b41a46e7f5da8b0 Mon Sep 17 00:00:00 2001 From: Andreas Gampe Date: Mon, 11 Apr 2016 08:39:52 -0700 Subject: [PATCH] Frameworks/base: Add no-thread marking to zygote Use ZygoteHooks code to mark zygote initialization to not be allowed to create threads. This is helpful when new classes are found to be used by apps but cannot be preloaded as they spawn threads. Bug: 27248115 Change-Id: I1dc3620d9e7d0054c672b993d89459fc4b353dfc --- core/java/com/android/internal/os/ZygoteInit.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index 5980ab69d7a46..78b5d61d3f1a3 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -43,6 +43,7 @@ import com.android.internal.os.InstallerConnection.InstallerException; import dalvik.system.DexFile; import dalvik.system.PathClassLoader; import dalvik.system.VMRuntime; +import dalvik.system.ZygoteHooks; import libcore.io.IoUtils; @@ -597,6 +598,10 @@ public class ZygoteInit { } public static void main(String argv[]) { + // Mark zygote start. This ensures that thread creation will throw + // an error. + ZygoteHooks.startZygoteNoThreadCreation(); + try { Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "ZygoteInit"); RuntimeInit.enableDdms(); @@ -648,6 +653,8 @@ public class ZygoteInit { // Zygote process unmounts root storage spaces. Zygote.nativeUnmountStorageOnInit(); + ZygoteHooks.stopZygoteNoThreadCreation(); + if (startSystemServer) { startSystemServer(abiList, socketName); }