X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fclientpool%2FSquidPurgeClientPool.php;h=3a2a971059ba2566b259bb5a6fd0ea936d4d848f;hb=0c8cbf66e707691a2d4ff3659d5f86adb4969375;hp=7b327d653da5d9b6788e319b1fd91b710e64bf57;hpb=57eaa2bf04ce1b48bd89c10defe4de5b7d31f047;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/clientpool/SquidPurgeClientPool.php b/includes/clientpool/SquidPurgeClientPool.php index 7b327d653d..3a2a971059 100644 --- a/includes/clientpool/SquidPurgeClientPool.php +++ b/includes/clientpool/SquidPurgeClientPool.php @@ -20,7 +20,7 @@ * @file */ class SquidPurgeClientPool { - /** @var array Array of SquidPurgeClient */ + /** @var SquidPurgeClient[] */ protected $clients = []; /** @var int */ @@ -46,11 +46,9 @@ class SquidPurgeClientPool { public function run() { $done = false; $startTime = microtime( true ); + while ( !$done ) { $readSockets = $writeSockets = []; - /** - * @var $client SquidPurgeClient - */ foreach ( $this->clients as $clientIndex => $client ) { $sockets = $client->getReadSocketsForSelect(); foreach ( $sockets as $i => $socket ) { @@ -61,19 +59,21 @@ class SquidPurgeClientPool { $writeSockets["$clientIndex/$i"] = $socket; } } - if ( !count( $readSockets ) && !count( $writeSockets ) ) { + if ( $readSockets === [] && $writeSockets === [] ) { break; } + $exceptSockets = null; $timeout = min( $startTime + $this->timeout - microtime( true ), 1 ); - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $numReady = socket_select( $readSockets, $writeSockets, $exceptSockets, $timeout ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( $numReady === false ) { wfDebugLog( 'squid', __METHOD__ . ': Error in stream_select: ' . socket_strerror( socket_last_error() ) . "\n" ); break; } + // Check for timeout, use 1% tolerance since we aimed at having socket_select() // exit at precisely the overall timeout if ( microtime( true ) - $startTime > $this->timeout * 0.99 ) { @@ -101,6 +101,7 @@ class SquidPurgeClientPool { } } } + foreach ( $this->clients as $client ) { $client->close(); }