chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
unit: save description/slice of transient units to /run
[elogind.git]
/
src
/
core
/
dbus-unit.c
diff --git
a/src/core/dbus-unit.c
b/src/core/dbus-unit.c
index 58310463056e1a571a2fc02275794b5ed47e9b02..e07a28e32d6bf07b243eb678e3f6ee8a441c881f 100644
(file)
--- a/
src/core/dbus-unit.c
+++ b/
src/core/dbus-unit.c
@@
-568,8
+568,9
@@
const DBusObjectPathVTable bus_unit_vtable = {
};
void bus_unit_send_change_signal(Unit *u) {
};
void bus_unit_send_change_signal(Unit *u) {
- _cleanup_free_ char *p = NULL;
_cleanup_dbus_message_unref_ DBusMessage *m = NULL;
_cleanup_dbus_message_unref_ DBusMessage *m = NULL;
+ _cleanup_free_ char *p = NULL;
+ int r;
assert(u);
assert(u);
@@
-587,8
+588,10
@@
void bus_unit_send_change_signal(Unit *u) {
}
p = unit_dbus_path(u);
}
p = unit_dbus_path(u);
- if (!p)
- goto oom;
+ if (!p) {
+ log_oom();
+ return;
+ }
if (u->sent_dbus_new_signal) {
/* Send a properties changed signal. First for the
if (u->sent_dbus_new_signal) {
/* Send a properties changed signal. First for the
@@
-601,19
+604,26
@@
void bus_unit_send_change_signal(Unit *u) {
m = bus_properties_changed_new(p,
UNIT_VTABLE(u)->bus_interface,
UNIT_VTABLE(u)->bus_invalidating_properties);
m = bus_properties_changed_new(p,
UNIT_VTABLE(u)->bus_interface,
UNIT_VTABLE(u)->bus_invalidating_properties);
- if (!m)
- goto oom;
+ if (!m) {
+ log_oom();
+ return;
+ }
- if (bus_broadcast(u->manager, m) < 0)
- goto oom;
+ r = bus_broadcast(u->manager, m);
+ if (r < 0) {
+ log_error("Failed to broadcast change message: %s", strerror(-r));
+ return;
+ }
dbus_message_unref(m);
}
m = bus_properties_changed_new(p, "org.freedesktop.systemd1.Unit",
INVALIDATING_PROPERTIES);
dbus_message_unref(m);
}
m = bus_properties_changed_new(p, "org.freedesktop.systemd1.Unit",
INVALIDATING_PROPERTIES);
- if (!m)
- goto oom;
+ if (!m) {
+ log_oom();
+ return;
+ }
} else {
/* Send a new signal */
} else {
/* Send a new signal */
@@
-621,25
+631,27
@@
void bus_unit_send_change_signal(Unit *u) {
m = dbus_message_new_signal("/org/freedesktop/systemd1",
"org.freedesktop.systemd1.Manager",
"UnitNew");
m = dbus_message_new_signal("/org/freedesktop/systemd1",
"org.freedesktop.systemd1.Manager",
"UnitNew");
- if (!m)
- goto oom;
+ if (!m) {
+ log_oom();
+ return;
+ }
if (!dbus_message_append_args(m,
DBUS_TYPE_STRING, &u->id,
DBUS_TYPE_OBJECT_PATH, &p,
if (!dbus_message_append_args(m,
DBUS_TYPE_STRING, &u->id,
DBUS_TYPE_OBJECT_PATH, &p,
- DBUS_TYPE_INVALID))
- goto oom;
+ DBUS_TYPE_INVALID)) {
+ log_oom();
+ return;
+ }
}
}
- if (bus_broadcast(u->manager, m) < 0)
- goto oom;
+ r = bus_broadcast(u->manager, m);
+ if (r < 0) {
+ log_error("Failed to broadcast UnitNew/PropertiesChanged message.");
+ return;
+ }
u->sent_dbus_new_signal = true;
u->sent_dbus_new_signal = true;
-
- return;
-
-oom:
- log_oom();
}
void bus_unit_send_removed_signal(Unit *u) {
}
void bus_unit_send_removed_signal(Unit *u) {
@@
-782,6
+794,7
@@
static int bus_unit_set_transient_property(
return -EINVAL;
if (mode != UNIT_CHECK) {
return -EINVAL;
if (mode != UNIT_CHECK) {
+ _cleanup_free_ char *contents = NULL;
const char *description;
dbus_message_iter_get_basic(i, &description);
const char *description;
dbus_message_iter_get_basic(i, &description);
@@
-789,6
+802,12
@@
static int bus_unit_set_transient_property(
r = unit_set_description(u, description);
if (r < 0)
return r;
r = unit_set_description(u, description);
if (r < 0)
return r;
+
+ contents = strjoin("[Unit]\nDescription=", description, "\n", NULL);
+ if (!contents)
+ return -ENOMEM;
+
+ unit_write_drop_in(u, mode, "Description", contents);
}
return 1;
}
return 1;
@@
-806,6
+825,8
@@
static int bus_unit_set_transient_property(
if (mode != UNIT_CHECK)
unit_ref_unset(&u->slice);
} else {
if (mode != UNIT_CHECK)
unit_ref_unset(&u->slice);
} else {
+ _cleanup_free_ char *contents = NULL;
+
r = manager_load_unit(u->manager, s, NULL, error, &slice);
if (r < 0)
return r;
r = manager_load_unit(u->manager, s, NULL, error, &slice);
if (r < 0)
return r;
@@
-815,6
+836,12
@@
static int bus_unit_set_transient_property(
if (mode != UNIT_CHECK)
unit_ref_set(&u->slice, slice);
if (mode != UNIT_CHECK)
unit_ref_set(&u->slice, slice);
+
+ contents = strjoin("[", UNIT_VTABLE(u)->private_section, "]\nSlice=", s, NULL);
+ if (!contents)
+ return -ENOMEM;
+
+ unit_write_drop_in(u, mode, "Slice", contents);
}
return 1;
}
}
return 1;
}