8000 [Messenger] Add call to `gc_collect_cycles()` after each message is h… · symfony/symfony@b0df65a · GitHub
[go: up one dir, main page]

Skip to content

Commit b0df65a

Browse files
jwagenicolas-grekas
authored andcommitted
[Messenger] Add call to gc_collect_cycles() after each message is handled
1 parent fafbbfa commit b0df65a

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

src/Symfony/Component/Messenger/Tests/WorkerTest.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,25 @@ public function testFlushBatchOnStop()
578578

579579
$this->assertSame($expectedMessages, $handler->processedMessages);
580580
}
581+
582+
public function testGcCollectCyclesIsCalledOnMessageHandle()
583+
{
584+
$apiMessage = new DummyMessage('API');
585+
586+
$receiver = new DummyReceiver([[new Envelope($apiMessage)]]);
587+
588+
$bus = $this->createMock(MessageBusInterface::class);
589+
590+
$dispatcher = new EventDispatcher();
591+
$dispatcher->addSubscriber(new StopWorkerOnMessageLimitListener(1));
592+
593+
$worker = new Worker(['transport' => $receiver], $bus, $dispatcher);
594+
$worker->run();
595+
596+
$gcStatus = gc_status();
597+
598+
$this->assertGreaterThan(0, $gcStatus['runs']);
599+
}
581600
}
582601

583602
class DummyReceiver implements ReceiverInterface

src/Symfony/Component/Messenger/Worker.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ public function run(array $options = []): void
118118
// this should prevent multiple lower priority receivers from
119119
// blocking too long before the higher priority are checked
120120
if ($envelopeHandled) {
121+
gc_collect_cycles();
122+
121123
break;
122124
}
123125
}

0 commit comments

Comments
 (0)
0