Improve inline documentation for the cron lock behavior.

Props ericlewis.
Fixes #32478.


git-svn-id: https://develop.svn.wordpress.org/trunk@32580 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Drew Jaynes 2015-05-24 17:25:52 +00:00
parent 2c32effa02
commit eb60152449
2 changed files with 14 additions and 5 deletions

View File

@ -64,7 +64,9 @@ $gmt_time = microtime( true );
if ( isset($keys[0]) && $keys[0] > $gmt_time )
die();
$doing_cron_transient = get_transient( 'doing_cron');
// The cron lock: a unix timestamp from when the cron was spawned.
$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 ) ) {
@ -79,7 +81,10 @@ if ( empty( $doing_wp_cron ) ) {
}
}
// Check lock
/*
* 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 )
return;

View File

@ -225,9 +225,12 @@ function spawn_cron( $gmt_time = 0 ) {
return;
/*
* multiple processes on multiple web servers can run this code concurrently
* try to make this as atomic as possible by setting doing_cron switch
*/
* Get the cron lock, which is a unix timestamp of when the last cron was spawned
* and has not finished running.
*
* Multiple processes on multiple web servers can run this code concurrently,
* this lock attempts to make spawning as atomic as possible.
*/
$lock = get_transient('doing_cron');
if ( $lock > $gmt_time + 10 * MINUTE_IN_SECONDS )
@ -266,6 +269,7 @@ function spawn_cron( $gmt_time = 0 ) {
return;
}
// Set the cron lock with the current unix timestamp, when the cron is being spawned.
$doing_wp_cron = sprintf( '%.22F', $gmt_time );
set_transient( 'doing_cron', $doing_wp_cron );