Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 36be7e61 authored by Tao Wu's avatar Tao Wu Committed by android-build-merger
Browse files

Merge "Fix one race condition between start and stop."

am: 876b13d0

Change-Id: Id2aee53665a57772f29c9f2e7604ba5418bfaecb
parents bd0f354e 876b13d0
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -720,14 +720,20 @@ Result<Success> Service::ExecStart() {
}

Result<Success> Service::Start() {
    bool disabled = (flags_ & (SVC_DISABLED | SVC_RESET));
    // Starting a service removes it from the disabled or reset state and
    // immediately takes it out of the restarting state if it was in there.
    flags_ &= (~(SVC_DISABLED|SVC_RESTARTING|SVC_RESET|SVC_RESTART|SVC_DISABLED_START));

    // Running processes require no additional work --- if they're in the
    // process of exiting, we've ensured that they will immediately restart
    // on exit, unless they are ONESHOT.
    // on exit, unless they are ONESHOT. For ONESHOT service, if it's in
    // stopping status, we just set SVC_RESTART flag so it will get restarted
    // in Reap().
    if (flags_ & SVC_RUNNING) {
        if ((flags_ & SVC_ONESHOT) && disabled) {
            flags_ |= SVC_RESTART;
        }
        // It is not an error to try to start a service that is already running.
        return Success();
    }