callScript: export child resourse via global var
authorAlexey Andriyanov <alan@al-an.info>
Thu, 6 Mar 2014 16:31:43 +0000 (20:31 +0400)
committerAlexey Andriyanov <alan@al-an.info>
Thu, 6 Mar 2014 16:31:43 +0000 (20:31 +0400)
The proc_open resulting resource may be needed outside the callScript()
function if a user has signal handlers. E.g., a user may want to limit
the execution time of a gateway scipt using the pcntl_alarm(). In that
case the child process may need to be terminated explicitly using the
$script_child_res global resource.

wwwroot/inc/remote.php

index e4ba644a33a8c85891d4f3e892d4d11dd66c06d7..08fd8bee6a79d63034a5f62fae1b2a00c15c9a12 100644 (file)
@@ -493,7 +493,7 @@ function queryTerminal ($object_id, $commands, $tolerate_remote_errors = TRUE)
 
 function callScript ($gwname, $params, $in, &$out, &$errors)
 {
-       global $racktables_gwdir, $local_gwdir, $gateway_log;
+       global $racktables_gwdir, $local_gwdir, $gateway_log, $script_child_res;
        if (isset ($gateway_log))
                $gateway_log = '';
 
@@ -543,6 +543,7 @@ function callScript ($gwname, $params, $in, &$out, &$errors)
        );
        if (! is_resource ($child))
                throw new RTGatewayError ("cant execute $binary");
+       $script_child_res = $child;
 
        $buff_size = 4096;
        $write_left = array ($pipes[0]);
@@ -599,7 +600,9 @@ function callScript ($gwname, $params, $in, &$out, &$errors)
                        $gateway_log = substr ($gateway_log, -MAX_GW_LOGSIZE);
 
        }
-       return proc_close ($child);
+       $ret = proc_close ($child);
+       $script_child_res = NULL;
+       return $ret;
 }
 
 function getRunning8021QConfig ($object_id)