[systemd-devel] [PATCH 1/7] logind: add function session_jobs_reply() to unify the create reply
Djalal Harouni
tixxdz at opendz.org
Thu Feb 6 12:37:14 PST 2014
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);
--
1.8.3.1
More information about the systemd-devel
mailing list