Fix race between post fork initialization and JIT.
Only start JIT threads after all zygote fork logic has been setup.
For robustness, also set the runtime state as the first thing post fork.
Test: m
Change-Id: Icf5db341275002599d0e89add4d9f6b2f799004d
diff --git a/runtime/runtime.h b/runtime/runtime.h
index ca01761..ea516cd 100644
--- a/runtime/runtime.h
+++ b/runtime/runtime.h
@@ -173,8 +173,17 @@
return is_system_server_;
}
- void SetSystemServer(bool value) {
- is_system_server_ = value;
+ void SetAsSystemServer() {
+ is_system_server_ = true;
+ is_zygote_ = false;
+ is_primary_zygote_ = false;
+ }
+
+ void SetAsZygoteChild(bool is_system_server, bool is_zygote) {
+ // System server should have been set earlier in SetAsSystemServer.
+ CHECK_EQ(is_system_server_, is_system_server);
+ is_zygote_ = is_zygote;
+ is_primary_zygote_ = false;
}
bool IsExplicitGcDisabled() const {