diff --git a/mailpoet/lib/Cron/ActionScheduler/RemoteExecutorHandler.php b/mailpoet/lib/Cron/ActionScheduler/RemoteExecutorHandler.php index 08a257c21f..f8359c25c5 100644 --- a/mailpoet/lib/Cron/ActionScheduler/RemoteExecutorHandler.php +++ b/mailpoet/lib/Cron/ActionScheduler/RemoteExecutorHandler.php @@ -2,6 +2,7 @@ namespace MailPoet\Cron\ActionScheduler; +use MailPoet\Util\Helpers; use MailPoet\WP\Functions as WPFunctions; class RemoteExecutorHandler { @@ -41,9 +42,17 @@ class RemoteExecutorHandler { } public function runActionScheduler(): void { - $this->wp->addFilter('action_scheduler_queue_runner_concurrent_batches', [$this, 'ensureConcurrency']); - \ActionScheduler_QueueRunner::instance()->run(); - wp_die(); + try { + $this->wp->addFilter('action_scheduler_queue_runner_concurrent_batches', [$this, 'ensureConcurrency']); + \ActionScheduler_QueueRunner::instance()->run(); + wp_die(); + } catch (\Exception $e) { + $mySqlGoneAwayMessage = Helpers::mySqlGoneAwayExceptionHandler($e); + if ($mySqlGoneAwayMessage) { + throw new \Exception($mySqlGoneAwayMessage, 0, $e); + } + throw $e; + } } /** diff --git a/mailpoet/lib/Cron/CronTrigger.php b/mailpoet/lib/Cron/CronTrigger.php index 6b4276ec74..8285129dce 100644 --- a/mailpoet/lib/Cron/CronTrigger.php +++ b/mailpoet/lib/Cron/CronTrigger.php @@ -4,6 +4,7 @@ namespace MailPoet\Cron; use MailPoet\Cron\Triggers\WordPress; use MailPoet\Settings\SettingsController; +use MailPoet\Util\Helpers; class CronTrigger { const METHOD_LINUX_CRON = 'Linux Cron'; @@ -51,6 +52,7 @@ class CronTrigger { return false; } catch (\Exception $e) { // cron exceptions should not prevent the rest of the site from loading + Helpers::mySqlGoneAwayExceptionHandler($e); } } diff --git a/mailpoet/lib/Cron/Daemon.php b/mailpoet/lib/Cron/Daemon.php index fa2878e046..9dc62215f7 100644 --- a/mailpoet/lib/Cron/Daemon.php +++ b/mailpoet/lib/Cron/Daemon.php @@ -4,6 +4,7 @@ namespace MailPoet\Cron; use MailPoet\Cron\Workers\WorkersFactory; use MailPoet\Logging\LoggerFactory; +use MailPoet\Util\Helpers; use MailPoetVendor\Doctrine\ORM\EntityManager; class Daemon { @@ -61,6 +62,8 @@ class Daemon { $worker->process($this->timer); // BC for workers not implementing CronWorkerInterface } } catch (\Exception $e) { + Helpers::mySqlGoneAwayExceptionHandler($e); + $workerClassNameParts = explode('\\', get_class($worker)); $workerName = end($workerClassNameParts); $errors[] = [ diff --git a/mailpoet/lib/Cron/Triggers/WordPress.php b/mailpoet/lib/Cron/Triggers/WordPress.php index b02fa66979..11c71de18b 100644 --- a/mailpoet/lib/Cron/Triggers/WordPress.php +++ b/mailpoet/lib/Cron/Triggers/WordPress.php @@ -18,6 +18,7 @@ use MailPoet\Mailer\MailerLog; use MailPoet\Newsletter\Sending\ScheduledTasksRepository; use MailPoet\Services\Bridge; use MailPoet\Settings\SettingsController; +use MailPoet\Util\Helpers; use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Doctrine\ORM\EntityManager; @@ -70,16 +71,24 @@ class WordPress { } public function run() { - if (!$this->checkRunInterval()) { - return false; - } - if (!$this->checkExecutionRequirements()) { - $this->stop(); - return; - } + try { + if (!$this->checkRunInterval()) { + return false; + } + if (!$this->checkExecutionRequirements()) { + $this->stop(); + return; + } - $this->supervisor->init(); - return $this->supervisor->checkDaemon(); + $this->supervisor->init(); + return $this->supervisor->checkDaemon(); + } catch (\Exception $e) { + $mySqlGoneAwayMessage = Helpers::mySqlGoneAwayExceptionHandler($e); + if ($mySqlGoneAwayMessage) { + throw new \Exception($mySqlGoneAwayMessage, 0, $e); + } + throw $e; + } } private function checkRunInterval(): bool {