Skip to content

Commit 1d200c0

Browse files
committed
Remove event listeners from CompositeStream once closed
1 parent 0a30318 commit 1d200c0

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

src/CompositeStream.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66

77
final class CompositeStream extends EventEmitter implements DuplexStreamInterface
88
{
9-
protected $readable;
10-
protected $writable;
11-
protected $closed = false;
9+
private $readable;
10+
private $writable;
11+
private $closed = false;
1212

1313
public function __construct(ReadableStreamInterface $readable, WritableStreamInterface $writable)
1414
{
@@ -77,5 +77,6 @@ public function close()
7777
$this->writable->close();
7878

7979
$this->emit('close');
80+
$this->removeAllListeners();
8081
}
8182
}

tests/CompositeStreamTest.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,25 @@ public function itShouldForwardCloseOnlyOnce()
188188
$writable->close();
189189
}
190190

191+
/** @test */
192+
public function itShouldForwardCloseAndRemoveAllListeners()
193+
{
194+
$in = new ThroughStream();
195+
196+
$composite = new CompositeStream($in, $in);
197+
$composite->on('close', $this->expectCallableOnce());
198+
199+
$this->assertTrue($composite->isReadable());
200+
$this->assertTrue($composite->isWritable());
201+
$this->assertCount(1, $composite->listeners('close'));
202+
203+
$composite->close();
204+
205+
$this->assertFalse($composite->isReadable());
206+
$this->assertFalse($composite->isWritable());
207+
$this->assertCount(0, $composite->listeners('close'));
208+
}
209+
191210
/** @test */
192211
public function itShouldReceiveForwardedEvents()
193212
{

0 commit comments

Comments
 (0)