mirror of
https://github.com/systemd/systemd.git
synced 2024-12-26 03:22:00 +03:00
unit: make unit_can_start() more accurate
This funciton is exposed via CanStart on the bus, and should be as accurate as possible. Hence: make sure to return false for units of unit types not supported on the system, and for unit types where configuration failed to load. Also see #1105.
This commit is contained in:
parent
9ce56418b1
commit
8ff4d2ab0d
@ -1416,9 +1416,14 @@ int unit_start(Unit *u) {
|
||||
|
||||
assert(u);
|
||||
|
||||
/* Units that aren't loaded cannot be started */
|
||||
if (u->load_state != UNIT_LOADED)
|
||||
return -EINVAL;
|
||||
|
||||
/* Units of types that aren't supported annot be started either */
|
||||
if (!unit_supported(u))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/* If this is already 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
|
||||
@ -1451,9 +1456,6 @@ int unit_start(Unit *u) {
|
||||
return unit_start(following);
|
||||
}
|
||||
|
||||
if (!unit_supported(u))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/* If it is stopped, but we cannot start it, then fail */
|
||||
if (!UNIT_VTABLE(u)->start)
|
||||
return -EBADR;
|
||||
@ -1472,6 +1474,12 @@ int unit_start(Unit *u) {
|
||||
bool unit_can_start(Unit *u) {
|
||||
assert(u);
|
||||
|
||||
if (u->load_state != UNIT_LOADED)
|
||||
return false;
|
||||
|
||||
if (!unit_supported(u))
|
||||
return false;
|
||||
|
||||
return !!UNIT_VTABLE(u)->start;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user