[X2Go-Commits] [x2goserver] 02/04: x2goserver/sbin/x2gocleansessions: rename %remembered_sessions_since to %remembered_sessions_status_since.

git-admin at x2go.org git-admin at x2go.org
Mon Jun 22 00:13:33 CEST 2015


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch master
in repository x2goserver.

commit 17671041f4234ecbdb45516fea6d35e6ae4ffca3
Author: Mihai Moldovan <ionic at ionic.de>
Date:   Sun Jun 21 22:44:41 2015 +0200

    x2goserver/sbin/x2gocleansessions: rename %remembered_sessions_since to %remembered_sessions_status_since.
    
    That's what it really is.
    
    Add comments to further clarify what it's actually doing.
    
    Change it to include a timestamp instead of the "iteration count
    multiplied by two" value.
    
    Compare timestamps to see if killing hanging nxagent processes is
    necessary.
    
    Cherry-picked from release/4.0.1.x branch.
---
 debian/changelog                  |    6 ++++++
 x2goserver/sbin/x2gocleansessions |   28 ++++++++++++++--------------
 2 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index d4b36cb..0ddd829 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -192,6 +192,12 @@ x2goserver (4.0.1.20-0x2go1) UNRELEASED; urgency=low
       x2golistsessions run may be desynchronized with the actual current
       value. Avoids a race condition logging users out after they attached to a
       session.
+    - x2goserver/sbin/x2gocleansessions: rename %remembered_sessions_since to
+      %remembered_sessions_status_since. That's what it really is. Add
+      comments to further clarify what it's actually doing. Change it to
+      include a timestamp instead of the "iteration count multiplied by two"
+      value. Compare timestamps to see if killing hanging nxagent processes is
+      necessary.
   * x2goserver.spec:
     - Add sudo and logcheck as BuildRequires and Requires. Don't own
       directories that are owned by sudo and logcheck. Logcheck is not
diff --git a/x2goserver/sbin/x2gocleansessions b/x2goserver/sbin/x2gocleansessions
index 11c98a3..8e374aa 100755
--- a/x2goserver/sbin/x2gocleansessions
+++ b/x2goserver/sbin/x2gocleansessions
@@ -146,7 +146,7 @@ elsif ($pid == 0 )
 	$SIG{CHLD} = sub { wait };
 
 	my %remembered_sessions_status = ();
-	my %remembered_sessions_since = ();
+	my %remembered_sessions_status_since = ();
 	my $last_reniced = 0;
 
 	my $user;
@@ -158,12 +158,12 @@ elsif ($pid == 0 )
 		my @outp=split("\n","$outp");
 
 		# forget earlier remembered blocked sessions
-		while ( my ($session, $remembered_since) = each(%remembered_sessions_since) )
+		while ( my ($session, $remembered_since) = each(%remembered_sessions_status_since) )
 		{
 			if (! join(',', @outp)=~m/$session/)
 			{
 				delete $remembered_sessions_status{$session};
-				delete $remembered_sessions_since{$session};
+				delete $remembered_sessions_status_since{$session};
 			}
 		}
 
@@ -172,22 +172,21 @@ elsif ($pid == 0 )
 
 			my @sinfo=split('\\|',"@outp[$i]");
 
-			# clean up invalid sessions from the session database
-			if ( ( ! @sinfo[0] ) && ( $remembered_sessions_since{ @sinfo[1] } ge 10 ) )
+			# Clean up invalid sessions (i.e., those for which no nxagent process is running anymore)
+			# from the session database, if the status didn't change for more than 10 seconds.
+			if ((!@sinfo[0]) && (defined ($remembered_sessions_status_since{@sinfo[1]})) && ((gmtime (time) - $remembered_sessions_status_since{@sinfo[1]}) >= 10))
 			{
 				dbsys_rmsessionsroot(@sinfo[1]);
 				next;
 			}
 
-			if (defined $remembered_sessions_since{ @sinfo[1] } && ($remembered_sessions_status{ @sinfo[1] } =~m/@sinfo[4]/ ))
-			{
-				$remembered_sessions_since{ @sinfo[1] } += 2;
-			} else {
-				$remembered_sessions_status{ @sinfo[1] } = @sinfo[4];
-				$remembered_sessions_since{ @sinfo[1] } = 0;
+			# Record the status of previously unseen sessions and the current time.
+			if (!(defined ($remembered_sessions_status_since{@sinfo[1]})) || ($remembered_sessions_status{@sinfo[1]} !~ m/@sinfo[4]/)) {
+				$remembered_sessions_status{@sinfo[1]} = @sinfo[4];
+				$remembered_sessions_status_since{@sinfo[1]} = gmtime (time);
 			}
 
-			#print @sinfo[1], ': ', $remembered_sessions_since{@sinfo[1]},' ',$remembered_sessions_status{@sinfo[1]},"\n";
+			#print @sinfo[1], ': ', $remembered_sessions_status_since{@sinfo[1]},' ',$remembered_sessions_status{@sinfo[1]},"\n";
 
 			# Update current status once per session. Avoids race conditions.
 			@sinfo[4] = system_capture_stdout_output ("$x2go_lib_path/x2gogetstatus", "@sinfo[1]");
@@ -195,12 +194,13 @@ elsif ($pid == 0 )
 			if (@sinfo[4]eq 'F')
 			{
 				log_message('debug', "@sinfo[1] is blocked");
-				if ($remembered_sessions_since{@sinfo[1]} ge 20)
+				# Kill the process if blocked for more than 20 seconds.
+				if ((gmtime (time) - $remembered_sessions_status_since{@sinfo[1]}) >= 20)
 				{
 					# send SIGKILL to dangling X-server processes
 					log_message('warning', "@sinfo[1]: found stale X-server process (@sinfo[0]), sending SIGKILL");
 					system("kill", "-9", "@sinfo[0]");
-					delete $remembered_sessions_since{@sinfo[1]};
+					delete $remembered_sessions_status_since{@sinfo[1]};
 				}
 				my $display = @sinfo[2];
 				if (-S "/tmp/.X11-unix/X$display") {

--
Alioth's /srv/git/code.x2go.org/x2goserver.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goserver.git


More information about the x2go-commits mailing list