diff options
author | Djalal Harouni <tixxdz@opendz.org> | 2014-02-06 21:37:14 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-02-07 16:34:18 +0100 |
commit | 99e7e3922e1d25d0092bd61444c86dcc9a1e030e (patch) | |
tree | d17632faf47eff81e35958f2014307fa9a5f41cb /src | |
parent | 743970d2ea6d08aa7c7bff8220f6b7702f2b1db7 (diff) |
logind: add function session_jobs_reply() to unify the create reply
The session_send_create_reply() function which notifies clients about
session creation is used for both session and user units. Unify the
shared code in a new function session_jobs_reply().
The session_save() will be called unconditionally on sessions since it
does not make sense to only call it if '!session->started', this will
also allow to update the session state as soon as possible.
Diffstat (limited to 'src')
-rw-r--r-- | src/login/logind-dbus.c | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index 642ba07f2e..28b5cd49a7 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -1911,6 +1911,27 @@ const sd_bus_vtable manager_vtable[] = { SD_BUS_VTABLE_END }; +static int session_jobs_reply(Session *s, const char *unit, const char *result) { + int r = 0; + + assert(s); + assert(unit); + + if (!s->started) + return r; + + if (streq(result, "done")) + r = session_send_create_reply(s, NULL); + else { + _cleanup_bus_error_free_ sd_bus_error e = SD_BUS_ERROR_NULL; + + sd_bus_error_setf(&e, BUS_ERROR_JOB_FAILED, "Start job for unit %s failed with '%s'", unit, result); + r = session_send_create_reply(s, &e); + } + + return r; +} + int match_job_removed(sd_bus *bus, sd_bus_message *message, void *userdata, sd_bus_error *error) { const char *path, *result, *unit; Manager *m = userdata; @@ -1950,18 +1971,9 @@ int match_job_removed(sd_bus *bus, sd_bus_message *message, void *userdata, sd_b session->scope_job = NULL; } - if (session->started) { - if (streq(result, "done")) - session_send_create_reply(session, NULL); - else { - _cleanup_bus_error_free_ sd_bus_error e = SD_BUS_ERROR_NULL; - - sd_bus_error_setf(&e, BUS_ERROR_JOB_FAILED, "Start job for unit %s failed with '%s'", unit, result); - session_send_create_reply(session, &e); - } - } else - session_save(session); + session_jobs_reply(session, unit, result); + session_save(session); session_add_to_gc_queue(session); } @@ -1979,17 +1991,7 @@ int match_job_removed(sd_bus *bus, sd_bus_message *message, void *userdata, sd_b } LIST_FOREACH(sessions_by_user, session, user->sessions) { - if (!session->started) - continue; - - if (streq(result, "done")) - session_send_create_reply(session, NULL); - else { - _cleanup_bus_error_free_ sd_bus_error e = SD_BUS_ERROR_NULL; - - sd_bus_error_setf(&e, BUS_ERROR_JOB_FAILED, "Start job for unit %s failed with '%s'", unit, result); - session_send_create_reply(session, &e); - } + session_jobs_reply(session, unit, result); } user_save(user); |