Skip to content

Commit 56cf65a

Browse files
committed
Remove circular reference from stream reader
1 parent 06bc84c commit 56cf65a

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

src/ProxyConnector.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,14 +134,11 @@ public function connect($uri)
134134

135135
// keep buffering data until headers are complete
136136
$buffer = '';
137-
$fn = function ($chunk) use (&$buffer, &$fn, $deferred, $stream) {
137+
$fn = function ($chunk) use (&$buffer, $deferred, $stream) {
138138
$buffer .= $chunk;
139139

140140
$pos = strpos($buffer, "\r\n\r\n");
141141
if ($pos !== false) {
142-
// end of headers received => stop buffering
143-
$stream->removeListener('data', $fn);
144-
145142
// try to parse headers as response message
146143
try {
147144
$response = Psr7\parse_response(substr($buffer, 0, $pos));
@@ -191,7 +188,10 @@ public function connect($uri)
191188

192189
$stream->write("CONNECT " . $host . ":" . $port . " HTTP/1.1\r\nHost: " . $host . ":" . $port . "\r\n" . $auth . "\r\n");
193190

194-
return $deferred->promise();
191+
return $deferred->promise()->always(function () use ($stream, $fn) {
192+
// Stop buffering when connection has been established or rejected.
193+
$stream->removeListener('data', $fn);
194+
});
195195
}, function (Exception $e) use ($proxyUri) {
196196
throw new RuntimeException('Unable to connect to proxy (ECONNREFUSED)', defined('SOCKET_ECONNREFUSED') ? SOCKET_ECONNREFUSED : 111, $e);
197197
});

0 commit comments

Comments
 (0)