Skip to content

Commit 92a9783

Browse files
authored
Merge pull request #113 from lucasnetau/gc_cycles
Cleanup circular reference between $server and event listener
2 parents 530abc7 + 992a674 commit 92a9783

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

src/Factory.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,9 +213,11 @@ static function (ConnectionInterface $connection) use ($server, $resolve, $rejec
213213
return Promise\reject(new RuntimeException('Handshake failed'));
214214
})->then(static function (MessengerInterface $messenger) use ($server, $resolve): void {
215215
$server->close();
216+
$server->removeAllListeners('connection');
216217
$resolve($messenger);
217218
}, static function (Throwable $throwable) use ($server, $reject): void {
218219
$server->close();
220+
$server->removeAllListeners();
219221
$reject($throwable);
220222
});
221223
}
@@ -227,6 +229,7 @@ static function (ConnectionInterface $connection) use ($server, $resolve, $rejec
227229
$process->start($loop);
228230
}, static function () use ($server, $process): void {
229231
$server->close();
232+
$server->removeAllListeners();
230233
$process->terminate();
231234
}))->then(static function (Messenger $messenger) use ($loop, $process): Messenger {
232235
$loop->addPeriodicTimer(self::INTERVAL, static function (TimerInterface $timer) use ($messenger, $loop, $process): void {

tests/FactoryTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,18 @@ static function (MessengerInterface $messenger): PromiseInterface {
5656
);
5757
self::assertSame(['foo' => 'bar'], $payload->getPayload());
5858
}
59+
60+
public function testNoGarbageCollectionAfterSuccessfulRun(): void
61+
{
62+
\gc_collect_cycles();
63+
$payload = await(
64+
Factory::parentFromClass(ReturnChild::class, $this->loop)->then(
65+
static function (MessengerInterface $messenger): PromiseInterface {
66+
return $messenger->rpc(MessagesFactory::rpc('return', ['foo' => 'bar']));
67+
}
68+
),
69+
$this->loop
70+
);
71+
$this->assertSame(0, \gc_collect_cycles());
72+
}
5973
}

0 commit comments

Comments
 (0)