summaryrefslogtreecommitdiff
path: root/src/systemctl/systemctl.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2012-05-03 22:53:25 +0200
committerLennart Poettering <lennart@poettering.net>2012-05-03 22:53:25 +0200
commit06dab8e18aebf822392c7ca66c5bf3c1200fdec8 (patch)
treeaed84062144c7aa2c316a802d058389ccb4b7fee /src/systemctl/systemctl.c
parent88f3e0c91f08c65a479e1aa09f171550b744d829 (diff)
dbus: include unit name in JobNew/JobRemoved signals
This breaks D-Bus interface slightly, but since the D-Bus API isn't covered by the interface stability promise this should be OK.
Diffstat (limited to 'src/systemctl/systemctl.c')
-rw-r--r--src/systemctl/systemctl.c30
1 files changed, 25 insertions, 5 deletions
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 681ad8c211..d80eb94af1 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -1349,18 +1349,19 @@ static DBusHandlerResult wait_filter(DBusConnection *connection, DBusMessage *me
} else if (dbus_message_is_signal(message, "org.freedesktop.systemd1.Manager", "JobRemoved")) {
uint32_t id;
- const char *path, *result;
+ const char *path, *result, *unit;
dbus_bool_t success = true;
if (dbus_message_get_args(message, &error,
DBUS_TYPE_UINT32, &id,
DBUS_TYPE_OBJECT_PATH, &path,
+ DBUS_TYPE_STRING, &unit,
DBUS_TYPE_STRING, &result,
DBUS_TYPE_INVALID)) {
char *p;
- if ((p = set_remove(d->set, (char*) path)))
- free(p);
+ p = set_remove(d->set, (char*) path);
+ free(p);
if (*result)
d->result = strdup(result);
@@ -1369,7 +1370,26 @@ static DBusHandlerResult wait_filter(DBusConnection *connection, DBusMessage *me
}
#ifndef LEGACY
dbus_error_free(&error);
+ if (dbus_message_get_args(message, &error,
+ DBUS_TYPE_UINT32, &id,
+ DBUS_TYPE_OBJECT_PATH, &path,
+ DBUS_TYPE_STRING, &result,
+ DBUS_TYPE_INVALID)) {
+ char *p;
+
+ /* Compatibility with older systemd versions <
+ * 183 during upgrades. This should be dropped
+ * one day. */
+ p = set_remove(d->set, (char*) path);
+ free(p);
+ if (*result)
+ d->result = strdup(result);
+
+ goto finish;
+ }
+
+ dbus_error_free(&error);
if (dbus_message_get_args(message, &error,
DBUS_TYPE_UINT32, &id,
DBUS_TYPE_OBJECT_PATH, &path,
@@ -1381,8 +1401,8 @@ static DBusHandlerResult wait_filter(DBusConnection *connection, DBusMessage *me
* 19 during upgrades. This should be dropped
* one day */
- if ((p = set_remove(d->set, (char*) path)))
- free(p);
+ p = set_remove(d->set, (char*) path);
+ free(p);
if (!success)
d->result = strdup("failed");