[PHP-BUG] Bug #74334 [NEW]: multicurl infinite loop

[email protected] ("julien at palard dot fr")
Newsgroups php.bugs
Message-ID <[email protected]>
From:             julien at palard dot fr
Operating system: Debian GNU/Linux 8.7 (jessie)
PHP version:      Irrelevant
Package:          cURL related
Bug Type:         Bug
Bug description:multicurl infinite loop

Description:
------------
Copying and pasting the example on
http://php.net/manual/en/function.curl-multi-init.php give an infinite
loop on:

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) {

because curl_multi_select always returns -1.

I tried stracing but found nothing relevant, there's no syscall during
the infinite loop, just before the loop I'm getting:


[pid 11348] 1490799411.296356 close(8)  = 0
[pid 11348] 1490799411.296397 madvise(0x7f425f426000, 8368128,
MADV_DONTNEED) = 0
[pid 11348] 1490799411.296428 exit(0)   = ?
[pid 11348] 1490799411.296473 +++ exited with 0 +++
[pid 11347] 1490799411.359286 <... poll resumed> ) = 1 ([{fd=9,
revents=POLLIN}])
[pid 11347] 1490799411.359362 ioctl(9, FIONREAD, [501]) = 0
[pid 11347] 1490799411.359438 recvfrom(9,
"\22>\201\200\0\1\0\2\0\r\0\f\3lxr\3php\3net\0\0\1\0\1\300\f\0"...,
2048, 0, {sa_family=AF_INET, sin_port=htons(53),
sin_addr=inet_addr("167.[redacted].1")}, [28->16]) = 501
[pid 11347] 1490799411.359594 poll([{fd=9, events=POLLIN}], 1, 4915) = 1
([{fd=9, revents=POLLIN}])
[pid 11347] 1490799411.469988 ioctl(9, FIONREAD, [105]) = 0
[pid 11347] 1490799411.470060 recvfrom(9,
"|b\201\200\0\1\0\1\0\1\0\0\3lxr\3php\3net\0\0\34\0\1\300\f\0"...,
65536, 0, {sa_family=AF_INET, sin_port=htons(53),
sin_addr=inet_addr("167.[redacted].1")}, [28->16]) = 105
[pid 11347] 1490799411.470150 close(9)  = 0
[pid 11347] 1490799411.470231 madvise(0x7f425fc27000, 8368128,
MADV_DONTNEED) = 0
[pid 11347] 1490799411.470284 exit(0)   = ?
[pid 11347] 1490799411.470346 +++ exited with 0 +++

The presence of [pid …] means that they are forks, not the main
process, which is looping.

Tested on 7.0.16-3 and 5.6.30-0+deb8u1 (from Debian packages).

Test script:
---------------
The example on http://php.net/manual/en/function.curl-multi-init.php
which is:

<?php
// create both cURL resources
$ch1 = curl_init();
$ch2 = curl_init();

// set URL and other appropriate options
curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
curl_setopt($ch2, CURLOPT_HEADER, 0);

//create the multiple cURL handle
$mh = curl_multi_init();

//add the two handles
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);

$active = null;
//execute the handles
do {
    $mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) {
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}

//close the handles
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

?>


Expected result:
----------------
An error or a result.

Actual result:
--------------
An infinite loop.

-- 
Edit bug report at https://bugs.php.net/bug.php?id=74334&edit=1
-- 
Try a snapshot (PHP 5.4):   https://bugs.php.net/fix.php?id=74334&r=trysnapshot54
Try a snapshot (PHP 5.5):   https://bugs.php.net/fix.php?id=74334&r=trysnapshot55
Try a snapshot (trunk):     https://bugs.php.net/fix.php?id=74334&r=trysnapshottrunk
Fixed in SVN:               https://bugs.php.net/fix.php?id=74334&r=fixed
Fixed in release:           https://bugs.php.net/fix.php?id=74334&r=alreadyfixed
Need backtrace:             https://bugs.php.net/fix.php?id=74334&r=needtrace
Need Reproduce Script:      https://bugs.php.net/fix.php?id=74334&r=needscript
Try newer version:          https://bugs.php.net/fix.php?id=74334&r=oldversion
Not developer issue:        https://bugs.php.net/fix.php?id=74334&r=support
Expected behavior:          https://bugs.php.net/fix.php?id=74334&r=notwrong
Not enough info:            https://bugs.php.net/fix.php?id=74334&r=notenoughinfo
Submitted twice:            https://bugs.php.net/fix.php?id=74334&r=submittedtwice
register_globals:           https://bugs.php.net/fix.php?id=74334&r=globals
PHP 4 support discontinued: https://bugs.php.net/fix.php?id=74334&r=php4
Daylight Savings:           https://bugs.php.net/fix.php?id=74334&r=dst
IIS Stability:              https://bugs.php.net/fix.php?id=74334&r=isapi
Install GNU Sed:            https://bugs.php.net/fix.php?id=74334&r=gnused
Floating point limitations: https://bugs.php.net/fix.php?id=74334&r=float
No Zend Extensions:         https://bugs.php.net/fix.php?id=74334&r=nozend
MySQL Configuration Error:  https://bugs.php.net/fix.php?id=74334&r=mysqlcfg
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.