You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
2.2 KiB
61 lines
2.2 KiB
2 years ago
|
From 83c49a5e54dffc3dfa85b79f6375cd0a42a4ff76 Mon Sep 17 00:00:00 2001
|
||
|
From: Lennart Poettering <lennart@poettering.net>
|
||
|
Date: Mon, 6 Aug 2018 19:34:39 +0200
|
||
|
Subject: [PATCH] logind: introduce little helper that checks whether a session
|
||
|
is ready
|
||
|
|
||
|
(cherry picked from commit b1951bc83ffbbb92ba4de7b9cba845421c2f35b1)
|
||
|
|
||
|
Related: #1642460
|
||
|
---
|
||
|
src/login/logind-session-dbus.c | 17 ++++++++++++-----
|
||
|
1 file changed, 12 insertions(+), 5 deletions(-)
|
||
|
|
||
|
diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c
|
||
|
index 88a2d33dc8..03585b7f8e 100644
|
||
|
--- a/src/login/logind-session-dbus.c
|
||
|
+++ b/src/login/logind-session-dbus.c
|
||
|
@@ -704,6 +704,15 @@ int session_send_lock_all(Manager *m, bool lock) {
|
||
|
return r;
|
||
|
}
|
||
|
|
||
|
+static bool session_ready(Session *s) {
|
||
|
+ assert(s);
|
||
|
+
|
||
|
+ /* Returns true when the session is ready, i.e. all jobs we enqueued for it are done (regardless if successful or not) */
|
||
|
+
|
||
|
+ return !s->scope_job &&
|
||
|
+ !s->user->service_job;
|
||
|
+}
|
||
|
+
|
||
|
int session_send_create_reply(Session *s, sd_bus_error *error) {
|
||
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *c = NULL;
|
||
|
_cleanup_close_ int fifo_fd = -1;
|
||
|
@@ -711,14 +720,13 @@ int session_send_create_reply(Session *s, sd_bus_error *error) {
|
||
|
|
||
|
assert(s);
|
||
|
|
||
|
- /* This is called after the session scope and the user service
|
||
|
- * were successfully created, and finishes where
|
||
|
+ /* This is called after the session scope and the user service were successfully created, and finishes where
|
||
|
* bus_manager_create_session() left off. */
|
||
|
|
||
|
if (!s->create_message)
|
||
|
return 0;
|
||
|
|
||
|
- if (!sd_bus_error_is_set(error) && (s->scope_job || s->user->service_job))
|
||
|
+ if (!sd_bus_error_is_set(error) && !session_ready(s))
|
||
|
return 0;
|
||
|
|
||
|
c = s->create_message;
|
||
|
@@ -731,8 +739,7 @@ int session_send_create_reply(Session *s, sd_bus_error *error) {
|
||
|
if (fifo_fd < 0)
|
||
|
return fifo_fd;
|
||
|
|
||
|
- /* Update the session state file before we notify the client
|
||
|
- * about the result. */
|
||
|
+ /* Update the session state file before we notify the client about the result. */
|
||
|
session_save(s);
|
||
|
|
||
|
p = session_bus_path(s);
|