This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository x2goserver. commit f13c44b590521b3b41dca6dfc079c7906c631894 Author: Mihai Moldovan <ionic@ionic.de> Date: Sun Jun 21 22:55:53 2015 +0200 x2goserver/sbin/x2gocleansessions: rename %remembered_sessions_status_since to %remembered_sessions_status_since_time. Add %remembered_sessions_status_since_iterations that will come in handy for the next change. Cherry-picked from release/4.0.1.x branch. --- debian/changelog | 5 +++++ x2goserver/sbin/x2gocleansessions | 29 +++++++++++++++++++---------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/debian/changelog b/debian/changelog index 0ddd829..13e7288 100644 --- a/debian/changelog +++ b/debian/changelog @@ -198,6 +198,11 @@ x2goserver (4.0.1.20-0x2go1) UNRELEASED; urgency=low include a timestamp instead of the "iteration count multiplied by two" value. Compare timestamps to see if killing hanging nxagent processes is necessary. + - x2goserver/sbin/x2gocleansessions: rename + %remembered_sessions_status_since to + %remembered_sessions_status_since_time. Add + %remembered_sessions_status_since_iterations that will come in handy for + the next change. * 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 8e374aa..7d28c05 100755 --- a/x2goserver/sbin/x2gocleansessions +++ b/x2goserver/sbin/x2gocleansessions @@ -146,7 +146,9 @@ elsif ($pid == 0 ) $SIG{CHLD} = sub { wait }; my %remembered_sessions_status = (); - my %remembered_sessions_status_since = (); + my %remembered_sessions_status_since_time = (); + my %remembered_sessions_status_since_iterations = (); + my $last_reniced = 0; my $user; @@ -158,12 +160,13 @@ elsif ($pid == 0 ) my @outp=split("\n","$outp"); # forget earlier remembered blocked sessions - while ( my ($session, $remembered_since) = each(%remembered_sessions_status_since) ) + while ( my ($session, $remembered_since) = each(%remembered_sessions_status_since_time) ) { if (! join(',', @outp)=~m/$session/) { delete $remembered_sessions_status{$session}; - delete $remembered_sessions_status_since{$session}; + delete $remembered_sessions_status_since_time{$session}; + delete $remembered_sessions_status_since_iterations{$session}; } } @@ -174,19 +177,25 @@ elsif ($pid == 0 ) # 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)) + if ((!@sinfo[0]) && (defined ($remembered_sessions_status_since_time{@sinfo[1]})) && ((gmtime (time) - $remembered_sessions_status_since_time{@sinfo[1]}) >= 10)) { dbsys_rmsessionsroot(@sinfo[1]); next; } - # 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]/)) { + # Record the status of either previously unseen or status-changing sessions and the current time. + if (!(defined ($remembered_sessions_status_since_time{@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); + $remembered_sessions_status_since_time{@sinfo[1]} = gmtime (time); + $remembered_sessions_status_since_iterations{@sinfo[1]} = 0; + } + else { + # Current status matches previously seen status and a time is recorded. + # Increment counter for this session. + ++$remembered_sessions_status_since_iterations{$sinfo[1]}; } - #print @sinfo[1], ': ', $remembered_sessions_status_since{@sinfo[1]},' ',$remembered_sessions_status{@sinfo[1]},"\n"; + #print @sinfo[1], ': ', $remembered_sessions_status_since_time{@sinfo[1]},' (' , $remembered_sessions_status_since_iterations{@sinfo[1]} ,'iterations) ',$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 +204,12 @@ elsif ($pid == 0 ) { log_message('debug', "@sinfo[1] is blocked"); # Kill the process if blocked for more than 20 seconds. - if ((gmtime (time) - $remembered_sessions_status_since{@sinfo[1]}) >= 20) + if ((gmtime (time) - $remembered_sessions_status_since_time{@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_status_since{@sinfo[1]}; + delete $remembered_sessions_status_since_time{@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