diff --git a/src/Curl/MultiCurl.php b/src/Curl/MultiCurl.php index 7c37608..4737c4d 100644 --- a/src/Curl/MultiCurl.php +++ b/src/Curl/MultiCurl.php @@ -488,6 +488,10 @@ class MultiCurl } } } + + if (!$active) { + $active = count($this->curls); + } } while ($active > 0); $this->isStarted = false; @@ -578,6 +582,5 @@ class MultiCurl } $curl->setJsonDecoder($this->jsonDecoder); $curl->call($curl->beforeSendFunction); - } } diff --git a/tests/PHPCurlClass/PHPMultiCurlClassTest.php b/tests/PHPCurlClass/PHPMultiCurlClassTest.php index 7fc7b54..af4fc85 100644 --- a/tests/PHPCurlClass/PHPMultiCurlClassTest.php +++ b/tests/PHPCurlClass/PHPMultiCurlClassTest.php @@ -1938,4 +1938,36 @@ class MultiCurlTest extends PHPUnit_Framework_TestCase PHPUnit_Framework_Assert::assertEquals('key=value', $instance->response); }); } + + public function testAddRequestAfterStart() { + $multi_curl = new MultiCurl(); + + $urls = array(); + $copy_of_urls = array(); + for ($i = 0; $i < 10; $i++) { + $url = Test::TEST_URL . '?' . md5(mt_rand()); + $urls[] = $url; + $copy_of_urls[] = $url; + } + + $urls_called = array(); + $multi_curl->complete(function ($instance) use (&$multi_curl, &$urls, &$urls_called) { + $urls_called[] = $instance->url; + $next_url = array_pop($urls); + if (!($next_url === null)) { + $multi_curl->addGet($next_url); + } + }); + + $multi_curl->addGet(array_pop($urls)); + $multi_curl->start(); + + $this->assertNotEmpty($copy_of_urls); + $this->assertNotEmpty($urls_called); + $this->assertEquals(count($copy_of_urls), count($urls_called)); + + foreach ($copy_of_urls as $url) { + $this->assertTrue(in_array($url, $urls_called, true)); + } + } }