[systemd-devel] [PATCH 1/7] logind: add function session_jobs_reply() to unify the create reply
Lennart Poettering
lennart at poettering.net
Fri Feb 7 07:35:06 PST 2014
On Thu, 06.02.14 21:37, Djalal Harouni (tixxdz at opendz.org) wrote:
Applied this one! Thanks!
> 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.
> ---
> src/login/logind-dbus.c | 46 ++++++++++++++++++++++++----------------------
> 1 file changed, 24 insertions(+), 22 deletions(-)
>
> diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
> index 4745961..7b050fb 100644
> --- a/src/login/logind-dbus.c
> +++ b/src/login/logind-dbus.c
> @@ -1919,6 +1919,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;
> @@ -1958,18 +1979,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);
> }
>
> @@ -1987,17 +1999,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);
Lennart
--
Lennart Poettering, Red Hat
More information about the systemd-devel
mailing list