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