- dbus_error_init(&error);
-
- log_debug("Got message: %s %s %s", strna(dbus_message_get_sender(message)), strna(dbus_message_get_interface(message)), strna(dbus_message_get_member(message)));
-
- if (dbus_message_is_signal(message, "org.freedesktop.systemd1.Manager", "JobRemoved")) {
- const char *path, *result, *unit;
- Machine *mm;
- uint32_t id;
-
- 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)) {
- log_error("Failed to parse JobRemoved message: %s", bus_error_message(&error));
- goto finish;
- }
-
- mm = hashmap_get(m->machine_units, unit);
- if (mm) {
- if (streq_ptr(path, mm->scope_job)) {
- free(mm->scope_job);
- mm->scope_job = NULL;
-
- if (mm->started) {
- if (streq(result, "done"))
- machine_send_create_reply(mm, NULL);
- else {
- dbus_set_error(&error, BUS_ERROR_JOB_FAILED, "Start job for unit %s failed with '%s'", unit, result);
- machine_send_create_reply(mm, &error);
- }
- } else
- machine_save(mm);
- }
-
- machine_add_to_gc_queue(mm);
- }
-
- } else if (dbus_message_is_signal(message, "org.freedesktop.DBus.Properties", "PropertiesChanged")) {
-
- _cleanup_free_ char *unit = NULL;
- const char *path;
-
- path = dbus_message_get_path(message);
- if (!path)
- goto finish;
-
- unit_name_from_dbus_path(path, &unit);
- if (unit) {
- Machine *mm;
-
- mm = hashmap_get(m->machine_units, unit);
- if (mm)
- machine_add_to_gc_queue(mm);
- }
-
- } else if (dbus_message_is_signal(message, "org.freedesktop.systemd1.Manager", "UnitRemoved")) {
- const char *path, *unit;
- Machine *mm;
-
- if (!dbus_message_get_args(message, &error,
- DBUS_TYPE_STRING, &unit,
- DBUS_TYPE_OBJECT_PATH, &path,
- DBUS_TYPE_INVALID)) {
- log_error("Failed to parse UnitRemoved message: %s", bus_error_message(&error));
- goto finish;
- }
-
- mm = hashmap_get(m->machine_units, unit);
- if (mm)
- machine_add_to_gc_queue(mm);