[systemd-devel] [PATCH 5/7] logind: just call session_get_state() to get the session state
Djalal Harouni
tixxdz at opendz.org
Thu Feb 6 12:37:18 PST 2014
In function user_get_state() remove the session_is_active() check, just
count on the session_get_state() function to get the correct session
state.
session_is_active() may return true before starting the session scope and
user service, this means it will return true even before the creation of
the session fifo_fd which will produce incorrect states.
Another point is that session_get_state() will check if the fifo_fd was
created before checking if the session is active, this is the correct
behaviour since the session fifo_fd should be considered the point of
session states synchronization.
So be consistent and follow the session_get_state() logic.
---
src/login/logind-user.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/login/logind-user.c b/src/login/logind-user.c
index 8183721..9ed216d 100644
--- a/src/login/logind-user.c
+++ b/src/login/logind-user.c
@@ -637,6 +637,7 @@ void user_add_to_gc_queue(User *u) {
UserState user_get_state(User *u) {
Session *i;
+ SessionState session_state;
bool all_closing = true;
assert(u);
@@ -645,9 +646,12 @@ UserState user_get_state(User *u) {
return USER_OPENING;
LIST_FOREACH(sessions_by_user, i, u->sessions) {
- if (session_is_active(i))
+ /* session_get_state() will check for fifo_fd */
+ session_state = session_get_state(i);
+
+ if (session_state == SESSION_ACTIVE)
return USER_ACTIVE;
- if (session_get_state(i) != SESSION_CLOSING)
+ else if (session_state != SESSION_CLOSING)
all_closing = false;
}
--
1.8.3.1
More information about the systemd-devel
mailing list