add "shutdown critical" to service
- "shutdown critical" prevents killing the service during shutdown. And the service will be started if not running. - Without it, services will be killed by SIGTERM / SIGKILL during shutdown. - Even services with "shutdown critical" will be killed if shutdown times out. - Removes ueventd and vold from hard coded list. Each service's rc will be updated to add "shutdown critical". watchdogd is still kept in the list. bug: 37626581 Test: reboot and check last kmsg Change-Id: Ie8cc699d1efbc59b9a2561bdd40fec64aed5a4bb
This commit is contained in:
parent
eb42bb8c8b
commit
cccb34fce8
5 changed files with 22 additions and 1 deletions
|
|
@ -260,6 +260,14 @@ runs the service.
|
|||
> Sets the child's /proc/self/oom\_score\_adj to the specified value,
|
||||
which must range from -1000 to 1000.
|
||||
|
||||
`shutdown <shutdown_behavior>`
|
||||
> Set shutdown behavior of the service process. When this is not specified,
|
||||
the service is killed during shutdown process by using SIGTERM and SIGKILL.
|
||||
The service with shutdown_behavior of "critical" is not killed during shutdown
|
||||
until shutdown times out. When shutdown times out, even services tagged with
|
||||
"shutdown critical" will be killed. When the service tagged with "shutdown critical"
|
||||
is not running when shut down starts, it will be started.
|
||||
|
||||
|
||||
Triggers
|
||||
--------
|
||||
|
|
|
|||
|
|
@ -364,13 +364,15 @@ void DoReboot(unsigned int cmd, const std::string& reason, const std::string& re
|
|||
// keep debugging tools until non critical ones are all gone.
|
||||
const std::set<std::string> kill_after_apps{"tombstoned", "logd", "adbd"};
|
||||
// watchdogd is a vendor specific component but should be alive to complete shutdown safely.
|
||||
const std::set<std::string> to_starts{"watchdogd", "vold", "ueventd"};
|
||||
const std::set<std::string> to_starts{"watchdogd"};
|
||||
ServiceManager::GetInstance().ForEachService([&kill_after_apps, &to_starts](Service* s) {
|
||||
if (kill_after_apps.count(s->name())) {
|
||||
s->SetShutdownCritical();
|
||||
} else if (to_starts.count(s->name())) {
|
||||
s->Start();
|
||||
s->SetShutdownCritical();
|
||||
} else if (s->IsShutdownCritical()) {
|
||||
s->Start(); // start shutdown critical service if not started
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -499,6 +499,14 @@ bool Service::ParseSetenv(const std::vector<std::string>& args, std::string* err
|
|||
return true;
|
||||
}
|
||||
|
||||
bool Service::ParseShutdown(const std::vector<std::string>& args, std::string* err) {
|
||||
if (args[1] == "critical") {
|
||||
flags_ |= SVC_SHUTDOWN_CRITICAL;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool Service::AddDescriptor(const std::vector<std::string>& args, std::string* err) {
|
||||
int perm = args.size() > 3 ? std::strtoul(args[3].c_str(), 0, 8) : -1;
|
||||
|
|
@ -602,6 +610,7 @@ const Service::OptionParserMap::Map& Service::OptionParserMap::map() const {
|
|||
{"namespace", {1, 2, &Service::ParseNamespace}},
|
||||
{"seclabel", {1, 1, &Service::ParseSeclabel}},
|
||||
{"setenv", {2, 2, &Service::ParseSetenv}},
|
||||
{"shutdown", {1, 1, &Service::ParseShutdown}},
|
||||
{"socket", {3, 6, &Service::ParseSocket}},
|
||||
{"file", {2, 2, &Service::ParseFile}},
|
||||
{"user", {1, 1, &Service::ParseUser}},
|
||||
|
|
|
|||
|
|
@ -137,6 +137,7 @@ class Service {
|
|||
bool ParseNamespace(const std::vector<std::string>& args, std::string* err);
|
||||
bool ParseSeclabel(const std::vector<std::string>& args, std::string* err);
|
||||
bool ParseSetenv(const std::vector<std::string>& args, std::string* err);
|
||||
bool ParseShutdown(const std::vector<std::string>& args, std::string* err);
|
||||
bool ParseSocket(const std::vector<std::string>& args, std::string* err);
|
||||
bool ParseFile(const std::vector<std::string>& args, std::string* err);
|
||||
bool ParseUser(const std::vector<std::string>& args, std::string* err);
|
||||
|
|
|
|||
|
|
@ -687,6 +687,7 @@ service ueventd /sbin/ueventd
|
|||
class core
|
||||
critical
|
||||
seclabel u:r:ueventd:s0
|
||||
shutdown critical
|
||||
|
||||
service healthd /sbin/healthd
|
||||
class core
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue