Merge "init: Prevent spin loop while waiting for exec or property"
am: c1ca1a8328
Change-Id: I591ac447da8d1a6f5db9e2aa48e30c80e0c5e631
This commit is contained in:
commit
0da0d9e79b
1 changed files with 13 additions and 11 deletions
|
@ -1322,22 +1322,24 @@ int main(int argc, char** argv) {
|
|||
am.QueueBuiltinAction(queue_property_triggers_action, "queue_property_triggers");
|
||||
|
||||
while (true) {
|
||||
if (!(waiting_for_exec || waiting_for_prop)) {
|
||||
am.ExecuteOneCommand();
|
||||
restart_processes();
|
||||
}
|
||||
|
||||
// By default, sleep until something happens.
|
||||
int epoll_timeout_ms = -1;
|
||||
|
||||
// If there's a process that needs restarting, wake up in time for that.
|
||||
if (process_needs_restart_at != 0) {
|
||||
epoll_timeout_ms = (process_needs_restart_at - time(nullptr)) * 1000;
|
||||
if (epoll_timeout_ms < 0) epoll_timeout_ms = 0;
|
||||
if (!(waiting_for_exec || waiting_for_prop)) {
|
||||
am.ExecuteOneCommand();
|
||||
}
|
||||
if (!(waiting_for_exec || waiting_for_prop)) {
|
||||
restart_processes();
|
||||
|
||||
// If there's more work to do, wake up again immediately.
|
||||
if (am.HasMoreCommands()) epoll_timeout_ms = 0;
|
||||
// If there's a process that needs restarting, wake up in time for that.
|
||||
if (process_needs_restart_at != 0) {
|
||||
epoll_timeout_ms = (process_needs_restart_at - time(nullptr)) * 1000;
|
||||
if (epoll_timeout_ms < 0) epoll_timeout_ms = 0;
|
||||
}
|
||||
|
||||
// If there's more work to do, wake up again immediately.
|
||||
if (am.HasMoreCommands()) epoll_timeout_ms = 0;
|
||||
}
|
||||
|
||||
epoll_event ev;
|
||||
int nr = TEMP_FAILURE_RETRY(epoll_wait(epoll_fd, &ev, 1, epoll_timeout_ms));
|
||||
|
|
Loading…
Reference in a new issue