Remove service defined in an APEX during userspace reboot
Such services will be re-parsed and added back to the service list
during post-fs-data stage.
Test: adb reboot userspace
Test: atest CtsInitTestCases
Bug: 145669993
Bug: 135984674
Change-Id: Ibb393dfe0f101c4ebe37bc763733fd5d981d3691
diff --git a/init/reboot.cpp b/init/reboot.cpp
index b04db7f..b987f7d 100644
--- a/init/reboot.cpp
+++ b/init/reboot.cpp
@@ -798,6 +798,14 @@
if (!SwitchToBootstrapMountNamespaceIfNeeded()) {
return Error() << "Failed to switch to bootstrap namespace";
}
+ // Remove services that were defined in an APEX.
+ ServiceList::GetInstance().RemoveServiceIf([](const std::unique_ptr<Service>& s) -> bool {
+ if (s->is_from_apex()) {
+ LOG(INFO) << "Removing service '" << s->name() << "' because it's defined in an APEX";
+ return true;
+ }
+ return false;
+ });
// Re-enable services
for (const auto& s : were_enabled) {
LOG(INFO) << "Re-enabling service '" << s->name() << "'";