summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2019-05-14 10:29:47 +0200
committerSimon Rettberg2019-05-14 10:29:47 +0200
commitc08365be03214ef1b5704c487bccaa6f9d211c57 (patch)
tree616822dcaef8ef3e23dbcf6d55e6a2c949a18bf0
parentProperly cap sleep after RPC call (diff)
downloadidle-daemon-c08365be03214ef1b5704c487bccaa6f9d211c57.tar.gz
idle-daemon-c08365be03214ef1b5704c487bccaa6f9d211c57.tar.xz
idle-daemon-c08365be03214ef1b5704c487bccaa6f9d211c57.zip
Retry loginctl show-session
Sometimes we try to query a session too soon after login. The session is already present in utmp, but not known to logind yet. Retry for those cases.
-rw-r--r--src/userlist.c3
-rw-r--r--src/userlist.h1
2 files changed, 4 insertions, 0 deletions
diff --git a/src/userlist.c b/src/userlist.c
index 6e1f3d2..fffe772 100644
--- a/src/userlist.c
+++ b/src/userlist.c
@@ -110,6 +110,9 @@ int getUserList( struct user *outbuf, int size )
outbuf[use].sessionLeader = u->ut_pid;
getSessionData( &outbuf[use] );
printf( "New Session: '%s' on '%s', Display '%s', logind session '%s', login pid '%d', utmp pid '%d'.\n", outbuf[use].user, outbuf[use].device, outbuf[use].display, outbuf[use].sessionName, (int)outbuf[use].sessionHead, (int)outbuf[use].sessionLeader );
+ } else if ( outbuf[use].sessionName[0] == '\0' && outbuf[use].loginctlFails < 5 ) {
+ getSessionData( &outbuf[use] );
+ outbuf[use].loginctlFails++;
}
outbuf[use].mark = true;
// Reset offset if timestamp changed
diff --git a/src/userlist.h b/src/userlist.h
index c0ffc2f..ca7a70b 100644
--- a/src/userlist.h
+++ b/src/userlist.h
@@ -17,6 +17,7 @@ struct user {
int lastWarnLevel;
int lastActivityOffset;
int lockTimeOffset;
+ int loginctlFails;
bool mark;
bool isLocked;
char user[STRLEN];