From 240f914e4f4bc28bba0d0705ade7d08a45487350 Mon Sep 17 00:00:00 2001 From: John Blackbourn Date: Tue, 30 May 2023 18:46:58 +0000 Subject: [PATCH] Cron API: Attempt to raise the PHP memory limit for cron event processing. Since cron events often consume extra memory by nature, it makes sense to give them the full amount available by default. In practice this means the memory will be increased to `WP_MAX_MEMORY_LIMIT` (which is 256MB by default) during cron event processing if the default memory limit is lower than this value. The new `cron_memory_limit` filter can be used to adjust this value if necessary. Note that this change will not by default affect external means of processing cron events, such as the `wp cron` command in WP-CLI, server-level crontab events, or any other cron event processing mechanism that bypasses `wp-cron.php`. Props iandunn, thakkarhardik Fixes #56628 git-svn-id: https://develop.svn.wordpress.org/trunk@55871 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-cron.php | 3 +++ src/wp-includes/functions.php | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/wp-cron.php b/src/wp-cron.php index f4211d82cd..161478ac49 100644 --- a/src/wp-cron.php +++ b/src/wp-cron.php @@ -46,6 +46,9 @@ if ( ! defined( 'ABSPATH' ) ) { require_once __DIR__ . '/wp-load.php'; } +// Attempt to raise the PHP memory limit for cron event processing. +wp_raise_memory_limit( 'cron' ); + /** * Retrieves the cron lock. * diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index d018e70716..d146c9195a 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -7523,7 +7523,7 @@ function mysql_to_rfc3339( $date_string ) { * @since 4.6.0 * * @param string $context Optional. Context in which the function is called. Accepts either 'admin', - * 'image', or an arbitrary other context. If an arbitrary context is passed, + * 'image', 'cron', or an arbitrary other context. If an arbitrary context is passed, * the similarly arbitrary {@see '$context_memory_limit'} filter will be * invoked. Default 'admin'. * @return int|string|false The limit that was set or false on failure. @@ -7584,6 +7584,21 @@ function wp_raise_memory_limit( $context = 'admin' ) { $filtered_limit = apply_filters( 'image_memory_limit', $filtered_limit ); break; + case 'cron': + /** + * Filters the memory limit allocated for WP-Cron event processing. + * + * @since 6.3.0 + * + * @param int|string $filtered_limit Maximum memory limit to allocate for WP-Cron. + * Default `WP_MAX_MEMORY_LIMIT` or the original + * php.ini `memory_limit`, whichever is higher. + * Accepts an integer (bytes), or a shorthand string + * notation, such as '256M'. + */ + $filtered_limit = apply_filters( 'cron_memory_limit', $filtered_limit ); + break; + default: /** * Filters the memory limit allocated for an arbitrary context.