diff --git a/php/class-cron.php b/php/class-cron.php index 5f3923dd6..065b3ac04 100644 --- a/php/class-cron.php +++ b/php/class-cron.php @@ -391,16 +391,20 @@ public function run_queue( WP_REST_Request $request ) { $this->init_time = (int) $request->get_param( 'time' ); $queue = $this->locker->get_lock_file( $this->init_time ); register_shutdown_function( array( $this, 'cleanup_failed_cron' ) ); - foreach ( $queue as $name ) { - if ( ! isset( $this->processes[ $name ] ) ) { - continue; - } - $process = $this->processes[ $name ]; - $data = $process['callback']( $name ); - // @todo: Log data result. - $this->unlock_schedule_process( $name ); + if ( ! empty( $queue ) ) { + foreach ( $queue as $name ) { + if ( ! isset( $this->processes[ $name ] ) ) { + continue; + } + $process = $this->processes[ $name ]; + $data = $process['callback']( $name ); + // @todo: Log data result. + + $this->unlock_schedule_process( $name ); + } } + $this->locker->delete_lock_file( $this->init_time ); } diff --git a/php/cron/class-lock-file.php b/php/cron/class-lock-file.php index 70b299849..2dcb0e755 100644 --- a/php/cron/class-lock-file.php +++ b/php/cron/class-lock-file.php @@ -33,7 +33,13 @@ class Lock_File { */ public function get_lock_file( $file = null ) { $lock_file = $this->get_lock_file_name( $file ); - $data = file_get_contents( $lock_file ); // phpcs:ignore WordPressVIPMinimum.Performance.FetchingRemoteData.FileGetContentsUnknown + + if ( ! file_exists( $lock_file ) ) { + return ''; + } + + $data = file_get_contents( $lock_file ); // phpcs:ignore WordPressVIPMinimum.Performance.FetchingRemoteData.FileGetContentsUnknown + if ( false !== strpos( $data, '[' ) ) { $data = json_decode( $data, true ); } @@ -106,5 +112,4 @@ public function delete_lock_file( $file = null ) { $file = $this->get_lock_file_name( $file ); wp_delete_file( $file ); } - }