diff --git a/src/Symfony/Component/Messenger/Tests/WorkerTest.php b/src/Symfony/Component/Messenger/Tests/WorkerTest.php index 82b3935867395..f13cbcf4ef793 100644 --- a/src/Symfony/Component/Messenger/Tests/WorkerTest.php +++ b/src/Symfony/Component/Messenger/Tests/WorkerTest.php @@ -578,6 +578,25 @@ public function testFlushBatchOnStop() $this->assertSame($expectedMessages, $handler->processedMessages); } + + public function testGcCollectCyclesIsCalledOnMessageHandle() + { + $apiMessage = new DummyMessage('API'); + + $receiver = new DummyReceiver([[new Envelope($apiMessage)]]); + + $bus = $this->createMock(MessageBusInterface::class); + + $dispatcher = new EventDispatcher(); + $dispatcher->addSubscriber(new StopWorkerOnMessageLimitListener(1)); + + $worker = new Worker(['transport' => $receiver], $bus, $dispatcher); + $worker->run(); + + $gcStatus = gc_status(); + + $this->assertGreaterThan(0, $gcStatus['runs']); + } } class DummyReceiver implements ReceiverInterface diff --git a/src/Symfony/Component/Messenger/Worker.php b/src/Symfony/Component/Messenger/Worker.php index 103dbf5d93e78..3dc85b52112fd 100644 --- a/src/Symfony/Component/Messenger/Worker.php +++ b/src/Symfony/Component/Messenger/Worker.php @@ -118,6 +118,8 @@ public function run(array $options = []): void // this should prevent multiple lower priority receivers from // blocking too long before the higher priority are checked if ($envelopeHandled) { + gc_collect_cycles(); + break; } }