From: Aaron Schulz Date: Tue, 21 Jan 2014 19:32:18 +0000 (-0800) Subject: Various fixes to job running code in Wiki.php X-Git-Tag: 1.31.0-rc.0~17089 X-Git-Url: https://git.cyclocoop.org/%242?a=commitdiff_plain;h=96b678e110f90237d66eb095fa6cf223524d7ff4;p=lhc%2Fweb%2Fwiklou.git Various fixes to job running code in Wiki.php * Make it async on Windows * Fixed possible "invalid filename" errors on Windows * Redirect output to dev/null to avoid hanging PHP bug: 60231 bug: 58719 Change-Id: If4e52b86fb3a1bff283dfba3dfac213367f47543 --- diff --git a/includes/Wiki.php b/includes/Wiki.php index 9a6e6b9e12..56d23b163b 100644 --- a/includes/Wiki.php +++ b/includes/Wiki.php @@ -637,12 +637,19 @@ class MediaWiki { } if ( !wfShellExecDisabled() && is_executable( $wgPhpCli ) ) { - // Start a background process to run some of the jobs. - // This will be asynchronous on *nix though not on Windows. + // Start a background process to run some of the jobs wfProfileIn( __METHOD__ . '-exec' ); $retVal = 1; $cmd = wfShellWikiCmd( "$IP/maintenance/runJobs.php", array( '--maxjobs', $n ) ); - wfShellExec( "$cmd &", $retVal ); + $cmd .= " >" . wfGetNull() . " 2>&1"; // don't hang PHP on pipes + if ( wfIsWindows() ) { + // Using START makes this async and also works around a bug where using + // wfShellExec() with a quoted script name causes a filename syntax error. + $cmd = "START /B \"bg\" $cmd"; + } else { + $cmd = "$cmd &"; + } + wfShellExec( $cmd, $retVal ); wfProfileOut( __METHOD__ . '-exec' ); } else { try {