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

Commit dc816d5d authored by Ben Gruver's avatar Ben Gruver Committed by Jean-Baptiste Queru
Browse files

Allow an onrestart command to stop the current service

For example,

service recovery /sbin/recovery
	onrestart start loadkeys
	onrestart class_start con
	onrestart stop recovery

Previously, if you had a service like the above, the "onrestart stop
recovery" clause would not have any effect, because the restart flag
would be re-set after the stop command had executed.

This is similar to a service with the "oneshot" keyword, with the critical
difference being that it executes the other onrestart commands when the
service dies.
parent e7cb137f
Loading
Loading
Loading
Loading

init/init.c

100644 → 100755
+2 −1
Original line number Diff line number Diff line
@@ -389,12 +389,13 @@ static int wait_for_one_process(int block)
        }
    }

    svc->flags |= SVC_RESTARTING;

    /* Execute all onrestart commands for this service. */
    list_for_each(node, &svc->onrestart.commands) {
        cmd = node_to_item(node, struct command, clist);
        cmd->func(cmd->nargs, cmd->args);
    }
    svc->flags |= SVC_RESTARTING;
    notify_service_state(svc->name, "restarting");
    return 0;
}