From 8aec412ff697bc14995746953912ca6fdf2c9ba8 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 2 Jul 2013 15:49:27 +0200 Subject: [PATCH] machined: sync to /run after job completed --- src/core/dbus-unit.c | 32 ++++++++++++++++++++------------ src/core/unit.c | 9 +++++++-- src/login/logind-dbus.c | 2 ++ src/machine/machined-dbus.c | 3 ++- 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/core/dbus-unit.c b/src/core/dbus-unit.c index ad6d5a603..583104630 100644 --- a/src/core/dbus-unit.c +++ b/src/core/dbus-unit.c @@ -778,16 +778,18 @@ static int bus_unit_set_transient_property( assert(i); if (streq(name, "Description")) { - const char *description; - if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_STRING) return -EINVAL; - dbus_message_iter_get_basic(i, &description); + if (mode != UNIT_CHECK) { + const char *description; - r = unit_set_description(u, description); - if (r < 0) - return r; + dbus_message_iter_get_basic(i, &description); + + r = unit_set_description(u, description); + if (r < 0) + return r; + } return 1; @@ -800,14 +802,20 @@ static int bus_unit_set_transient_property( dbus_message_iter_get_basic(i, &s); - r = manager_load_unit(u->manager, s, NULL, error, &slice); - if (r < 0) - return r; + if (isempty(s)) { + if (mode != UNIT_CHECK) + unit_ref_unset(&u->slice); + } else { + r = manager_load_unit(u->manager, s, NULL, error, &slice); + if (r < 0) + return r; - if (slice->type != UNIT_SLICE) - return -EINVAL; + if (slice->type != UNIT_SLICE) + return -EINVAL; - unit_ref_set(&u->slice, slice); + if (mode != UNIT_CHECK) + unit_ref_set(&u->slice, slice); + } return 1; } diff --git a/src/core/unit.c b/src/core/unit.c index 991111ab3..acc575b6e 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -231,8 +231,13 @@ int unit_set_description(Unit *u, const char *description) { assert(u); - if (!(s = strdup(description))) - return -ENOMEM; + if (isempty(description)) + s = NULL; + else { + s = strdup(description); + if (!s) + return -ENOMEM; + } free(u->description); u->description = s; diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index 9a19932af..e61ec7afd 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -2356,6 +2356,7 @@ DBusHandlerResult bus_message_filter( if (streq_ptr(path, s->scope_job)) { free(s->scope_job); s->scope_job = NULL; + session_save(s); if (s->started) { if (streq(result, "done")) @@ -2382,6 +2383,7 @@ DBusHandlerResult bus_message_filter( u->slice_job = NULL; } + user_save(u); user_add_to_gc_queue(u); } } diff --git a/src/machine/machined-dbus.c b/src/machine/machined-dbus.c index 83a45b63b..a81f37c5c 100644 --- a/src/machine/machined-dbus.c +++ b/src/machine/machined-dbus.c @@ -116,7 +116,7 @@ static bool valid_machine_name(const char *p) { static int bus_manager_create_machine(Manager *manager, DBusMessage *message) { - const char *name, *service, *class, *slice, *root_directory; + const char *name, *service, *class, *root_directory; _cleanup_free_ char *p = NULL; DBusMessageIter iter, sub; MachineClass c; @@ -537,6 +537,7 @@ DBusHandlerResult bus_message_filter( if (streq_ptr(path, mm->scope_job)) { free(mm->scope_job); mm->scope_job = NULL; + machine_save(mm); if (mm->started) { if (streq(result, "done")) -- 2.30.2