Skip to content

Commit f4d0610

Browse files
committed
bug symfony#60515 [Mailer] Fix memory leak with mailer.message_logger_listener (andrew-demb)
This PR was squashed before being merged into the 7.3 branch. Discussion ---------- [Mailer] Fix memory leak with `mailer.message_logger_listener` | Q | A | ------------- | --- | Branch? | 7.3 | Bug fix? | yes | New feature? | no | Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files --> | Issues | Fix symfony#50580 | License | MIT Register `mailer.message_logger_listener` only when profiler enabled to prevent memory leaks as suggested in: - symfony#50580 (comment) - symfony#50580 (comment) ~~`@stof` can you guide me about the way how to implement your second suggestion too? symfony#50580 (comment) UPD: resolved _This change may be considered as a minor BC break - DI service won't be available anymore with disabled profiler._ Commits ------- b63317d [Mailer] Fix memory leak with `mailer.message_logger_listener`
2 parents 292b474 + b63317d commit f4d0610

File tree

3 files changed

+15
-7
lines changed

3 files changed

+15
-7
lines changed

src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
use Symfony\Component\Mailer\EventListener\DkimSignedMessageListener;
1616
use Symfony\Component\Mailer\EventListener\EnvelopeListener;
1717
use Symfony\Component\Mailer\EventListener\MessageListener;
18-
use Symfony\Component\Mailer\EventListener\MessageLoggerListener;
1918
use Symfony\Component\Mailer\EventListener\MessengerTransportListener;
2019
use Symfony\Component\Mailer\EventListener\SmimeEncryptedMessageListener;
2120
use Symfony\Component\Mailer\EventListener\SmimeSignedMessageListener;
@@ -72,10 +71,6 @@
7271
])
7372
->tag('kernel.event_subscriber')
7473

75-
->set('mailer.message_logger_listener', MessageLoggerListener::class)
76-
->tag('kernel.event_subscriber')
77-
->tag('kernel.reset', ['method' => 'reset'])
78-
7974
->set('mailer.messenger_transport_listener', MessengerTransportListener::class)
8075
->tag('kernel.event_subscriber')
8176

src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer_debug.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,17 @@
1212
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
1313

1414
use Symfony\Component\Mailer\DataCollector\MessageDataCollector;
15+
use Symfony\Component\Mailer\EventListener\MessageLoggerListener;
1516

1617
return static function (ContainerConfigurator $container) {
1718
$container->services()
19+
->set('mailer.message_logger_listener', MessageLoggerListener::class)
20+
->args([
21+
service('profiler.is_disabled_state_checker')->nullOnInvalid(),
22+
])
23+
->tag('kernel.event_subscriber')
24+
->tag('kernel.reset', ['method' => 'reset'])
25+
1826
->set('mailer.data_collector', MessageDataCollector::class)
1927
->args([
2028
service('mailer.message_logger_listener'),

src/Symfony/Component/Mailer/EventListener/MessageLoggerListener.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@ class MessageLoggerListener implements EventSubscriberInterface, ResetInterface
2525
{
2626
private MessageEvents $events;
2727

28-
public function __construct()
29-
{
28+
public function __construct(
29+
protected ?\Closure $disabled = null,
30+
) {
3031
$this->events = new MessageEvents();
3132
}
3233

@@ -37,6 +38,10 @@ public function reset(): void
3738

3839
public function onMessage(MessageEvent $event): void
3940
{
41+
if ($this->disabled?->__invoke()) {
42+
return;
43+
}
44+
4045
$this->events->add($event);
4146
}
4247

0 commit comments

Comments
 (0)