- 
          
- 
                Notifications
    You must be signed in to change notification settings 
- Fork 68
Open
Labels
Description
The following code causes a memory/FD leak:
<?php
require 'vendor/autoload.php';
use Amp\Http\Client\Request;
use Amp\Http\Client\HttpClientBuilder;
use function Amp\async;
use function Amp\Future\await;
ini_set('memory_limit', '64M');
final class Test {
	public static function t(): void {
		$ips = [];
		$counter = 0;
		for ($x = 0; $x < 1000000; $x++) {
			$ip = long2ip($x);
			$ips[$ip] = $ip;
			if ($x % 1000 === 0) {
				echo "counter: $counter\n";
				self::resolveIps($ips);
				$ips = [];
			}
		}
	}
	private static function resolveIps(array $ips, int $threads = 10): void {
		$client = (new HttpClientBuilder())
			->retry(0)
			->build()
		;
		$futures = [];
		foreach ($ips as $ip => &$item) {
			if (str_starts_with($ip, '172.')) {
				$item = [
					'country' => '',
					'city' => '',
				];
				continue;
			}
			$futures[] = async(function () use (&$client, $ip, &$item) {
				$response = $client->request(new Request('http://127.0.0.1:16003/?ip=' . $ip));
				$responseString = $response->getBody()->buffer();
			});
			if (count($futures) % $threads === 0) {
				await($futures);
				$futures = [];
			}
		}unset($item);
		if (count($futures) > 0) {
			await($futures);
			unset($futures);
		}
	}
}
Test::t();xtrime-ru