Code is Poetry.
WordPress' code just... wasn't. This is now dealt with. Props jrf, pento, netweb, GaryJ, jdgrimes, westonruter, Greg Sherwood from PHPCS, and everyone who's ever contributed to WPCS and PHPCS. Fixes #41057. Built from https://develop.svn.wordpress.org/trunk@42343 git-svn-id: http://core.svn.wordpress.org/trunk@42172 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
45
wp-cron.php
45
wp-cron.php
@@ -16,19 +16,20 @@
|
||||
* @package WordPress
|
||||
*/
|
||||
|
||||
ignore_user_abort(true);
|
||||
ignore_user_abort( true );
|
||||
|
||||
if ( !empty($_POST) || defined('DOING_AJAX') || defined('DOING_CRON') )
|
||||
if ( ! empty( $_POST ) || defined( 'DOING_AJAX' ) || defined( 'DOING_CRON' ) ) {
|
||||
die();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tell WordPress we are doing the CRON task.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
define('DOING_CRON', true);
|
||||
define( 'DOING_CRON', true );
|
||||
|
||||
if ( !defined('ABSPATH') ) {
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
/** Set up WordPress environment */
|
||||
require_once( dirname( __FILE__ ) . '/wp-load.php' );
|
||||
}
|
||||
@@ -57,21 +58,24 @@ function _get_cron_lock() {
|
||||
$value = wp_cache_get( 'doing_cron', 'transient', true );
|
||||
} else {
|
||||
$row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", '_transient_doing_cron' ) );
|
||||
if ( is_object( $row ) )
|
||||
if ( is_object( $row ) ) {
|
||||
$value = $row->option_value;
|
||||
}
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
if ( false === $crons = _get_cron_array() )
|
||||
if ( false === $crons = _get_cron_array() ) {
|
||||
die();
|
||||
}
|
||||
|
||||
$keys = array_keys( $crons );
|
||||
$keys = array_keys( $crons );
|
||||
$gmt_time = microtime( true );
|
||||
|
||||
if ( isset($keys[0]) && $keys[0] > $gmt_time )
|
||||
if ( isset( $keys[0] ) && $keys[0] > $gmt_time ) {
|
||||
die();
|
||||
}
|
||||
|
||||
|
||||
// The cron lock: a unix timestamp from when the cron was spawned.
|
||||
@@ -79,14 +83,15 @@ $doing_cron_transient = get_transient( 'doing_cron' );
|
||||
|
||||
// Use global $doing_wp_cron lock otherwise use the GET lock. If no lock, trying grabbing a new lock.
|
||||
if ( empty( $doing_wp_cron ) ) {
|
||||
if ( empty( $_GET[ 'doing_wp_cron' ] ) ) {
|
||||
if ( empty( $_GET['doing_wp_cron'] ) ) {
|
||||
// Called from external script/job. Try setting a lock.
|
||||
if ( $doing_cron_transient && ( $doing_cron_transient + WP_CRON_LOCK_TIMEOUT > $gmt_time ) )
|
||||
if ( $doing_cron_transient && ( $doing_cron_transient + WP_CRON_LOCK_TIMEOUT > $gmt_time ) ) {
|
||||
return;
|
||||
}
|
||||
$doing_cron_transient = $doing_wp_cron = sprintf( '%.22F', microtime( true ) );
|
||||
set_transient( 'doing_cron', $doing_wp_cron );
|
||||
} else {
|
||||
$doing_wp_cron = $_GET[ 'doing_wp_cron' ];
|
||||
$doing_wp_cron = $_GET['doing_wp_cron'];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,12 +99,14 @@ if ( empty( $doing_wp_cron ) ) {
|
||||
* The cron lock (a unix timestamp set when the cron was spawned),
|
||||
* must match $doing_wp_cron (the "key").
|
||||
*/
|
||||
if ( $doing_cron_transient != $doing_wp_cron )
|
||||
if ( $doing_cron_transient != $doing_wp_cron ) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ( $crons as $timestamp => $cronhooks ) {
|
||||
if ( $timestamp > $gmt_time )
|
||||
if ( $timestamp > $gmt_time ) {
|
||||
break;
|
||||
}
|
||||
|
||||
foreach ( $cronhooks as $hook => $keys ) {
|
||||
|
||||
@@ -108,8 +115,8 @@ foreach ( $crons as $timestamp => $cronhooks ) {
|
||||
$schedule = $v['schedule'];
|
||||
|
||||
if ( $schedule != false ) {
|
||||
$new_args = array($timestamp, $schedule, $hook, $v['args']);
|
||||
call_user_func_array('wp_reschedule_event', $new_args);
|
||||
$new_args = array( $timestamp, $schedule, $hook, $v['args'] );
|
||||
call_user_func_array( 'wp_reschedule_event', $new_args );
|
||||
}
|
||||
|
||||
wp_unschedule_event( $timestamp, $hook, $v['args'] );
|
||||
@@ -123,16 +130,18 @@ foreach ( $crons as $timestamp => $cronhooks ) {
|
||||
* @param string $hook Name of the hook that was scheduled to be fired.
|
||||
* @param array $args The arguments to be passed to the hook.
|
||||
*/
|
||||
do_action_ref_array( $hook, $v['args'] );
|
||||
do_action_ref_array( $hook, $v['args'] );
|
||||
|
||||
// If the hook ran too long and another cron process stole the lock, quit.
|
||||
if ( _get_cron_lock() != $doing_wp_cron )
|
||||
if ( _get_cron_lock() != $doing_wp_cron ) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( _get_cron_lock() == $doing_wp_cron )
|
||||
if ( _get_cron_lock() == $doing_wp_cron ) {
|
||||
delete_transient( 'doing_cron' );
|
||||
}
|
||||
|
||||
die();
|
||||
|
||||
Reference in New Issue
Block a user