diff options
Diffstat (limited to 'maintenance/rebuildLocalisationCache.php')
-rw-r--r-- | maintenance/rebuildLocalisationCache.php | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/maintenance/rebuildLocalisationCache.php b/maintenance/rebuildLocalisationCache.php index b04639c0..47866dc0 100644 --- a/maintenance/rebuildLocalisationCache.php +++ b/maintenance/rebuildLocalisationCache.php @@ -113,6 +113,7 @@ class RebuildLocalisationCache extends Maintenance { $total = count( $codes ); $chunks = array_chunk( $codes, ceil( count( $codes ) / $threads ) ); $pids = array(); + $parentStatus = 0; foreach ( $chunks as $codes ) { // Do not fork for only one thread $pid = ( $threads > 1 ) ? pcntl_fork() : -1; @@ -121,9 +122,8 @@ class RebuildLocalisationCache extends Maintenance { // Child, reseed because there is no bug in PHP: // http://bugs.php.net/bug.php?id=42465 mt_srand( getmypid() ); - $numRebuilt = $this->doRebuild( $codes, $lc, $force ); - // Abuse the exit value for the count of rebuild languages - exit( $numRebuilt ); + $this->doRebuild( $codes, $lc, $force ); + exit( 0 ); } elseif ( $pid === -1 ) { // Fork failed or one thread, do it serialized $numRebuilt += $this->doRebuild( $codes, $lc, $force ); @@ -136,13 +136,20 @@ class RebuildLocalisationCache extends Maintenance { foreach ( $pids as $pid ) { $status = 0; pcntl_waitpid( $pid, $status ); - // Fetch the count from the return value - $numRebuilt += pcntl_wexitstatus( $status ); + if ( pcntl_wexitstatus( $status ) ) { + // Pass a fatal error code through to the caller + $parentStatus = pcntl_wexitstatus( $status ); + } } - $this->output( "$numRebuilt languages rebuilt out of $total\n" ); - if ( $numRebuilt === 0 ) { - $this->output( "Use --force to rebuild the caches which are still fresh.\n" ); + if ( !$pids ) { + $this->output( "$numRebuilt languages rebuilt out of $total\n" ); + if ( $numRebuilt === 0 ) { + $this->output( "Use --force to rebuild the caches which are still fresh.\n" ); + } + } + if ( $parentStatus ) { + exit( $parentStatus ); } } |