ID:               39037
 User updated by:  eugen at id dot com dot ua
 Reported By:      eugen at id dot com dot ua
-Status:           Feedback
+Status:           Open
 Bug Type:         cURL related
 Operating System: Fedora Core 5
 PHP Version:      5.1.6
 New Comment:

Here is short script without external resources requipment:

<?php
echo "Initial memory usage: ".memory_get_usage()."\n";

$tasks = array(
        "http://www.google.com";,
        "http://www.php.net";
);

$curl_handles = array();
$mh = curl_multi_init();

reset($tasks);
while (list($index, $row)=each($tasks)) {
        $cid = curl_init($row);
        curl_setopt($cid, CURLOPT_RETURNTRANSFER, 1);
        curl_multi_add_handle($mh, $cid);
        $curl_handles[ $index ] = $cid;
}

do { 
        $n = curl_multi_exec($mh, $active);
        $info = curl_multi_info_read($mh);
        
        if (!empty($info)) {
                reset($curl_handles);
                while (list($task_id, $handle)=each($curl_handles)) {
                        if ($handle == $info['handle']) {
                                $done_task_id = $task_id;
                                break;
                        }
                }
                
                echo "Task $tasks[$done_task_id] completed\n";
                $memory_usage = memory_get_usage();
                // this should free up resources
                curl_close($info['handle']);
                $diff = memory_get_usage() - $memory_usage;
                echo "Memory usage was: $memory_usage, after curl_close: $diff 
bytes
more\n";
        }

} while ($active);
?>


Previous Comments:
------------------------------------------------------------------------

[2006-10-04 15:35:51] [EMAIL PROTECTED]

Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves. 

A proper reproducing script starts with <?php and ends with ?>,
is max. 10-20 lines long and does not require any external 
resources such as databases, etc. If the script requires a 
database to demonstrate the issue, please make sure it creates 
all necessary tables, stored procedures etc.

Please avoid embedding huge scripts into the report.

>P.S. ìîæíî íà ðóññêîì :)
No, it's a public system.

------------------------------------------------------------------------

[2006-10-04 15:32:33] eugen at id dot com dot ua

I've tried to do the same with PHP 5.2.0RC5-dev - no changes.
Memory usage before and after code

curl_close($handle);
curl_multi_remove_handle($mh, $handle);

is the same. 

Looks like curl doesn't release memory which containing downloaded
files.

P.S. ìîæíî íà ðóññêîì :)

------------------------------------------------------------------------

[2006-10-04 14:25:03] [EMAIL PROTECTED]

Please try using this CVS snapshot:

  http://snaps.php.net/php5.2-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5.2-win32-latest.zip



------------------------------------------------------------------------

[2006-10-04 14:08:48] eugen at id dot com dot ua

Description:
------------
Possible memory leaks when using curl_multi_* functions. 

I start 10 tasks with curl_multi and at completion of one of them add a
new task. The use of memory is gradually increased thus, although
$GLOBALS has a permanent size approximately.

In particular, at the call of curl_close() or
curl_multi_remove_handle() memory is not freed (I guess it should
be...)

Reproduce code:
---------------
http://www.follow.net.ua/bug.phps
(see MEMORY_IS_NOT_RELEASED_HERE string near the end of file).

Expected result:
----------------
Downloading queue of documents with 10 threads

Actual result:
--------------
Gradual increasing of memory usage (sizeof $GLOBALS is *NOT*
increasing)


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=39037&edit=1

Reply via email to