From: Frederik Ramm Date: Mon, 21 Feb 2011 00:02:17 +0000 (+0000) Subject: fix potential deadlock when writing a lot of data to a psql pipe and not reading... X-Git-Tag: v2.0.0~170 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/b83af9c24856192429a839e3fbe2590e37d01da6 fix potential deadlock when writing a lot of data to a psql pipe and not reading what comes back; stdout/stderr weren't used anyway so just connect them through --- diff --git a/utils/setup.php b/utils/setup.php index c7667b15..0b5392da 100755 --- a/utils/setup.php +++ b/utils/setup.php @@ -372,22 +372,18 @@ $sCMD = 'psql -p '.$aDSNInfo['port'].' '.$aDSNInfo['database']; $aDescriptors = array( 0 => array('pipe', 'r'), - 1 => array('pipe', 'w'), - 2 => array('file', '/dev/null', 'a') + 1 => STDOUT, + 2 => STDERR ); $ahPipes = null; $hProcess = proc_open($sCMD, $aDescriptors, $ahPipes); if (!is_resource($hProcess)) fail('unable to start pgsql'); - fwrite($ahPipes[0], $sScript); - fclose($ahPipes[0]); - - // TODO: error checking - while(!feof($ahPipes[1])) + while(strlen($sScript)) { - echo fread($ahPipes[1], 4096); + $written = fwrite($ahPipes[0], $sScript); + $sScript = substr($sScript, $written); } - fclose($ahPipes[1]); - + fclose($ahPipes[0]); proc_close($hProcess); }