# HG changeset patch # User Dan # Date 1243365930 14400 # Node ID 73780a159e15147018480a7c1412043ba524ef67 # Parent 32f6e2ee15ab67fe1e049350435bd3731347760a DCOP: added safeguards for mysterious zombie behavior diff -r 32f6e2ee15ab -r 73780a159e15 functions.php --- a/functions.php Tue May 26 15:24:26 2009 -0400 +++ b/functions.php Tue May 26 15:25:30 2009 -0400 @@ -90,12 +90,37 @@ function dcop_action($component, $action) { - $tmpfile = tempnam('amaweb', ''); - if ( !$tmpfile ) - burnout('tempnam() failed us'); - system("dcop amarok $component $action > $tmpfile"); - $output = @file_get_contents($tmpfile); - @unlink($tmpfile); + file_put_contents('php://stderr', "[dcop] start..."); + if ( function_exists('proc_open') ) + { + $descriptorspec = array( + 0 => array('pipe', 'r'), + 1 => array('pipe', 'w'), + 2 => array('pipe', 'w') + ); + $dcop_command = "dcop amarok $component $action"; + $dcop_process = proc_open($dcop_command, $descriptorspec, $dcop_pipes); + do + { + $status = proc_get_status($dcop_process); + usleep(2000); + } while ( $status['running'] ); + pcntl_waitpid($status['pid'], $status); + $output = fgets($dcop_pipes[1], 1024); + proc_close($dcop_process); + } + else + { + $tmpfile = tempnam('amaweb', ''); + if ( !$tmpfile ) + burnout('tempnam() failed us'); + + // This is freezing up for some reason. + system("dcop amarok $component $action > $tmpfile"); + $output = @file_get_contents($tmpfile); + @unlink($tmpfile); + } + file_put_contents('php://stderr', "got it...\r"); $output = trim($output); // detect type of output @@ -165,7 +190,7 @@ if ( defined('HTTPD_WS_CHILD') ) { global $httpd; - posix_kill($httpd->parent_pid, SIGUSR1); + posix_kill($httpd->parent_pid, SIGHUP); } }