assert(u);
p = unit_dbus_path(u);
- if (!u)
+ if (!p)
return -ENOMEM;
/* Send a properties changed signal. First for the specific
* type, then for the generic unit. The clients may rely on
* this order to get atomic behavior if needed. */
- if (UNIT_VTABLE(u)->bus_changing_properties) {
-
- r = sd_bus_emit_properties_changed_strv(
- bus, p,
- UNIT_VTABLE(u)->bus_interface,
- (char**) UNIT_VTABLE(u)->bus_changing_properties);
- if (r < 0)
- return r;
+ r = sd_bus_emit_properties_changed_strv(
+ bus, p,
+ UNIT_VTABLE(u)->bus_interface,
+ NULL);
+ if (r < 0) {
+ log_warning("Failed to send out specific PropertiesChanged signal for %s: %s", u->id, strerror(-r));
+ return r;
}
- return sd_bus_emit_properties_changed(
+ r = sd_bus_emit_properties_changed_strv(
bus, p,
"org.freedesktop.systemd1.Unit",
- "ActiveState",
- "SubState",
- "InactiveExitTimestamp",
- "ActiveEnterTimestamp",
- "ActiveExitTimestamp",
- "InactiveEnterTimestamp",
- "Job",
- "ConditionResult",
- "ConditionTimestamp",
NULL);
+ if (r < 0) {
+ log_warning("Failed to send out generic PropertiesChanged signal for %s: %s", u->id, strerror(-r));
+ return r;
+ }
+
+ return 0;
}
void bus_unit_send_change_signal(Unit *u) {
if (r < 0)
return r;
- if (!unit_name_is_valid(s, false) || !endswith(s, ".slice"))
+ if (!unit_name_is_valid(s, TEMPLATE_INVALID) || !endswith(s, ".slice"))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid slice name %s", s);
if (isempty(s)) {
return r;
while ((r = sd_bus_message_read(message, "s", &other)) > 0) {
- if (!unit_name_is_valid(other, false))
+ if (!unit_name_is_valid(other, TEMPLATE_INVALID))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid unit name %s", other);
if (mode != UNIT_CHECK) {
assert(u);
assert(message);
- if (u->transient)
- mode &= UNIT_RUNTIME;
-
/* We iterate through the array twice. First run we just check
* if all passed data is valid, second run actually applies
* it. This is to implement transaction-like behaviour without