mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-25 23:21:33 +03:00
unit: if start is called for a non-startable service and it is around, return EALREADY, don't refuse
This commit is contained in:
parent
c0dafa4853
commit
7898b0cf7e
17
unit.c
17
unit.c
@ -478,13 +478,18 @@ int unit_start(Unit *u) {
|
||||
|
||||
assert(u);
|
||||
|
||||
if (!UNIT_VTABLE(u)->start)
|
||||
return -EBADR;
|
||||
|
||||
/* If this is already (being) started, then this will
|
||||
* succeed. Note that this will even succeed if this unit is
|
||||
* not startable by the user. This is relied on to detect when
|
||||
* we need to wait for units and when waiting is finished. */
|
||||
state = unit_active_state(u);
|
||||
if (UNIT_IS_ACTIVE_OR_RELOADING(state))
|
||||
return -EALREADY;
|
||||
|
||||
/* If it is stopped, but we cannot start it, then fail */
|
||||
if (!UNIT_VTABLE(u)->start)
|
||||
return -EBADR;
|
||||
|
||||
/* We don't suppress calls to ->start() here when we are
|
||||
* already starting, to allow this request to be used as a
|
||||
* "hurry up" call, for example when the unit is in some "auto
|
||||
@ -511,13 +516,13 @@ int unit_stop(Unit *u) {
|
||||
|
||||
assert(u);
|
||||
|
||||
if (!UNIT_VTABLE(u)->stop)
|
||||
return -EBADR;
|
||||
|
||||
state = unit_active_state(u);
|
||||
if (state == UNIT_INACTIVE)
|
||||
return -EALREADY;
|
||||
|
||||
if (!UNIT_VTABLE(u)->stop)
|
||||
return -EBADR;
|
||||
|
||||
if (state == UNIT_DEACTIVATING)
|
||||
return 0;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user