The branch, master has been updated via a550eb7a5dc58acee577343c6d6031d394b79f3b (commit) from 6b219e9ca6f76e55df80ba369807c9be831902de (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit a550eb7a5dc58acee577343c6d6031d394b79f3b Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Mon Dec 30 00:29:34 2013 +0100 Handle situations in SupeReNicer where the agent PID is not set. ----------------------------------------------------------------------- Summary of changes: X2Go/SupeReNicer.pm | 103 ++++++++++++++++++++++++++++----------------------- debian/changelog | 1 + 2 files changed, 57 insertions(+), 47 deletions(-) The diff of changes is: diff --git a/X2Go/SupeReNicer.pm b/X2Go/SupeReNicer.pm index 0df187b..0f8a3cb 100644 --- a/X2Go/SupeReNicer.pm +++ b/X2Go/SupeReNicer.pm @@ -43,12 +43,17 @@ our @EXPORT=('superenice'); sub checkPID { my $pid = sanitizer("num",$_[0]); - open(PS,"/bin/ps --no-headers -o %u,%p,%n,%c -p $pid|"); - my ($pidInf,undef) = <PS>; - close(PS); - my ($user,$pid,$nice,$cmd) = split(/\,/,clups($pidInf)); - $pid =~ s/\D//g; - return ($pid,$user,$nice,$cmd) + if ( $pid ) + { + open(PS,"/bin/ps --no-headers -o %u,%p,%n,%c -p $pid|"); + my ($pidInf,undef) = <PS>; + close(PS); + my ($user,$pid,$nice,$cmd) = split(/\,/,clups($pidInf)); + $pid =~ s/\D//g; + return ($pid,$user,$nice,$cmd); + } else { + return (-1, "failure", 0, "failed to sanitize PID"); + } } @@ -118,42 +123,44 @@ sub superenice { # Using the NICE value of the agent to figgure out the current nice state... my ($psP,$psU,$psN,$psC) = checkPID($agentPid); - if ($x2goState eq "R") { + if ($psP > -1) { + if ($x2goState eq "R") { - # State is R (Running?)... - if ($psN ne $normalNL) { - # If nice level is not normal, renice to normal... - syslog('notice', "ReNicing \"$userID\" to level $normalNL for session \"$x2gosid\""); - # For the sake of getting a user back to normal ASAP... We'll renice the entire user not just individual sessions... - system("renice", "-n", "$normalNL", "-u", "$userID"); - } + # State is R (Running?)... + if ($psN ne $normalNL) { + # If nice level is not normal, renice to normal... + syslog('notice', "ReNicing \"$userID\" to level $normalNL for session \"$x2gosid\""); + # For the sake of getting a user back to normal ASAP... We'll renice the entire user not just individual sessions... + system("renice", "-n", "$normalNL", "-u", "$userID"); + } - } elsif ($x2goState eq "S") { + } elsif ($x2goState eq "S") { - # State is S (suspended) - if ($psN ne $idleNL) { + # State is S (suspended) + if ($psN ne $idleNL) { - # Did we renice this? - open(AUPS,"/bin/ps --no-headers -o %u,%p,%n,%c -u $userID|"); # use PS to fetch a list of the users current processes - while (<AUPS>) { - my ($user,$pid,$nice,$cmd) = split(/\,/,clups($_)); - $pid = sanitizer("num",$pid); - - if (-f "/proc/$pid/environ") { - open(ENVIRON,"/proc/$pid/environ");my ($Environ,undef) = <ENVIRON>;close(ENVIRON); - if ($Environ =~ m/X2GO_SESSION=$x2gosid/) { # If the x2go Session ID is in environ... renice the pid... - #syslog('debug', "$pid: X2GO_SESSION=$x2gosid"); - system("renice", "-n", "$idleNL", "-p", "$pid"); + # Did we renice this? + open(AUPS,"/bin/ps --no-headers -o %u,%p,%n,%c -u $userID|"); # use PS to fetch a list of the users current processes + while (<AUPS>) { + my ($user,$pid,$nice,$cmd) = split(/\,/,clups($_)); + $pid = sanitizer("num",$pid); + + if (-f "/proc/$pid/environ") { + open(ENVIRON,"/proc/$pid/environ");my ($Environ,undef) = <ENVIRON>;close(ENVIRON); + if ($Environ =~ m/X2GO_SESSION=$x2gosid/) { # If the x2go Session ID is in environ... renice the pid... + #syslog('debug', "$pid: X2GO_SESSION=$x2gosid"); + system("renice", "-n", "$idleNL", "-p", "$pid"); + } } - } - } - close(AUPS); + } + close(AUPS); - # Renice the AGENT so that we'll know that this one is already reniced. - system("renice", "-n", "$idleNL", "-p", "$agentPid"); - syslog('notice', "ReNicing \"$userID\" to level $idleNL for session \"$x2gosid\""); + # Renice the AGENT so that we'll know that this one is already reniced. + system("renice", "-n", "$idleNL", "-p", "$agentPid"); + syslog('notice', "ReNicing \"$userID\" to level $idleNL for session \"$x2gosid\""); + } } } } @@ -198,22 +205,24 @@ sub superenice { # Using the NICE value of the agent to figgure out the current nice state... my ($psP,$psU,$psN,$psC) = checkPID($agentPid); syslog('debug', "$nUser:$x2goState,$agentPid:$psP,$psU,$psN,$psC"); - # State is R (Running?)... - if ($x2goState eq "R") { + if ($psP > -1) { + # State is R (Running?)... + if ($x2goState eq "R") { - # If nice level is not normal, renice to normal... - if ($psN ne $normalNL) { - syslog('debug', "ReNicing \"$nUser\" to level $normalNL"); - system("renice", "-n", "$normalNL", "-u", "$nUser"); - } + # If nice level is not normal, renice to normal... + if ($psN ne $normalNL) { + syslog('debug', "ReNicing \"$nUser\" to level $normalNL"); + system("renice", "-n", "$normalNL", "-u", "$nUser"); + } - # State is S (suspended) - } elsif ($x2goState eq "S") { + # State is S (suspended) + } elsif ($x2goState eq "S") { - # Did we renice this? - if ($psN ne $idleNL) { - syslog('debug', "ReNicing \"$nUser\" to level $idleNL"); - system("renice", "-n", "$idleNL", "-u", "$nUser"); + # Did we renice this? + if ($psN ne $idleNL) { + syslog('debug', "ReNicing \"$nUser\" to level $idleNL"); + system("renice", "-n", "$idleNL", "-u", "$nUser"); + } } } } diff --git a/debian/changelog b/debian/changelog index 823fe95..979576c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -38,6 +38,7 @@ x2goserver (4.1.0.0-0x2go1) UNRELEASED; urgency=low - Provide Perl functions to capture stdout/stderr with multi-argument system calls. - Avoid one argument system calls and backticks in SupeReNicer. + - Handle situations in SupeReNicer where the agent PID is not set. * debian/control: + Package X2Go::Log in separate package: libx2go-log-perl. + Package X2Go::Server::DB in separate package: libx2go-server-db-perl. hooks/post-receive -- x2goserver.git (X2Go Server) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "x2goserver.git" (X2Go Server).