chiark / gitweb /
main: fix auto restarting of units after a configuration reload
[elogind.git] / src / dbus-unit.c
index 2dcd032a451408166f02a4e208575e4a55de1ad3..c9ccac1472f9937a18a376c5f744460092b823cc 100644 (file)
@@ -47,6 +47,24 @@ int bus_unit_append_names(Manager *m, DBusMessageIter *i, const char *property,
         return 0;
 }
 
+int bus_unit_append_following(Manager *m, DBusMessageIter *i, const char *property, void *data) {
+        Unit *u = data, *f;
+        const char *d;
+
+        assert(m);
+        assert(i);
+        assert(property);
+        assert(u);
+
+        f = unit_following(u);
+        d = f ? f->meta.id : "";
+
+        if (!dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &d))
+                return -ENOMEM;
+
+        return 0;
+}
+
 int bus_unit_append_dependencies(Manager *m, DBusMessageIter *i, const char *property, void *data) {
         Unit *u;
         Iterator j;
@@ -416,6 +434,9 @@ void bus_unit_send_change_signal(Unit *u) {
                 u->meta.in_dbus_queue = false;
         }
 
+        if (!u->meta.id)
+                return;
+
         if (!bus_has_subscriber(u->meta.manager)) {
                 u->meta.sent_dbus_new_signal = true;
                 return;
@@ -473,6 +494,9 @@ void bus_unit_send_removed_signal(Unit *u) {
         if (!u->meta.sent_dbus_new_signal)
                 bus_unit_send_change_signal(u);
 
+        if (!u->meta.id)
+                return;
+
         if (!(p = unit_dbus_path(u)))
                 goto oom;