From 43028a40d5d68bb3bf5e6e0dc7a7a5888e64a706 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 18 Oct 2019 16:48:22 +0200 Subject: Add feature to clean up user processes after logout --- src/userlist.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src/userlist.c') diff --git a/src/userlist.c b/src/userlist.c index fffe772..d4dde86 100644 --- a/src/userlist.c +++ b/src/userlist.c @@ -52,7 +52,8 @@ int getUserList( struct user *outbuf, int size ) if ( outbuf[i].user[0] != '\0' ) { deadzone = i + 1; } - outbuf[i].mark = false; + outbuf[i].lastOnline = outbuf[i].online; + outbuf[i].online = false; } struct utmp buffer[100]; ssize_t len = read( fh, buffer, sizeof(buffer) ); @@ -114,7 +115,7 @@ int getUserList( struct user *outbuf, int size ) getSessionData( &outbuf[use] ); outbuf[use].loginctlFails++; } - outbuf[use].mark = true; + outbuf[use].online = true; // Reset offset if timestamp changed // but ONLY if this isn't a known X session if ( outbuf[use].display[0] == '\0' ) { @@ -128,11 +129,11 @@ int getUserList( struct user *outbuf, int size ) close( fh ); // Compact for ( int i = 0; i < deadzone; ++i ) { - if ( outbuf[i].mark ) - continue; // In use + if ( outbuf[i].online || outbuf[i].lastOnline ) + continue; // In use, or just finished do { deadzone--; - if ( outbuf[deadzone].mark ) { + if ( outbuf[deadzone].online || outbuf[deadzone].lastOnline ) { outbuf[i] = outbuf[deadzone]; outbuf[deadzone].user[0] = '\0'; break; -- cgit v1.2.3-55-g7522