mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-03-12 22:04:07 +00:00
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
This commit is contained in:
@@ -372,22 +372,18 @@
|
|||||||
$sCMD = 'psql -p '.$aDSNInfo['port'].' '.$aDSNInfo['database'];
|
$sCMD = 'psql -p '.$aDSNInfo['port'].' '.$aDSNInfo['database'];
|
||||||
$aDescriptors = array(
|
$aDescriptors = array(
|
||||||
0 => array('pipe', 'r'),
|
0 => array('pipe', 'r'),
|
||||||
1 => array('pipe', 'w'),
|
1 => STDOUT,
|
||||||
2 => array('file', '/dev/null', 'a')
|
2 => STDERR
|
||||||
);
|
);
|
||||||
$ahPipes = null;
|
$ahPipes = null;
|
||||||
$hProcess = proc_open($sCMD, $aDescriptors, $ahPipes);
|
$hProcess = proc_open($sCMD, $aDescriptors, $ahPipes);
|
||||||
if (!is_resource($hProcess)) fail('unable to start pgsql');
|
if (!is_resource($hProcess)) fail('unable to start pgsql');
|
||||||
|
|
||||||
fwrite($ahPipes[0], $sScript);
|
while(strlen($sScript))
|
||||||
fclose($ahPipes[0]);
|
|
||||||
|
|
||||||
// TODO: error checking
|
|
||||||
while(!feof($ahPipes[1]))
|
|
||||||
{
|
{
|
||||||
echo fread($ahPipes[1], 4096);
|
$written = fwrite($ahPipes[0], $sScript);
|
||||||
|
$sScript = substr($sScript, $written);
|
||||||
}
|
}
|
||||||
fclose($ahPipes[1]);
|
fclose($ahPipes[0]);
|
||||||
|
|
||||||
proc_close($hProcess);
|
proc_close($hProcess);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user