ID: 45161
User updated by: humbads at alum dot mit dot edu
-Summary: reusing a curl handle leaks memory
Reported By: humbads at alum dot mit dot edu
Status: Open
Bug Type: cURL related
Operating System: FreeBSD 6.2, Windows XP SP3
PHP Version: 5.2.6
New Comment:
Below is the r.php script. When testing this bug report, please use
this script (or some other URL) so my poor server does not get
hammered.
<?php
// This script runs a variable amount of time
// and generates a variable amount of data
// Output a random number of blank space
$s = microtime(true);
$m = rand(100,200);
$bytes = 0;
for($i = 0; $i < $m; $i++) {
$message = " \n";
print $message;
$bytes += strlen($message);
usleep(10);
}
// Print time taken and the value of the "echo" parameter
print isset($_REQUEST['echo']) ? 'echo: '.$_REQUEST['echo'].' ' : "";
print $bytes.' bytes ';
print " in ";
print round(microtime(true) - $s, 4)." seconds";
exit();
?>
Previous Comments:
------------------------------------------------------------------------
[2008-06-03 15:04:41] humbads at alum dot mit dot edu
Description:
------------
Reusing a curl handle for multiple requests leaks memory. It leaks
about 100 bytes per request. This is a problem when making a large
number of requests using the same handle. Libcurl documentation says to
always reuse the handle when possible in order to reuse connections.
The bug occurs on Windows XP/IIS and Apache/FreeBSD 6.2.
Reproduce code:
---------------
<?php
// Reuse curl handle memory leak test
$ch = curl_init();
$startmem = memory_get_usage();
for($i = 0; $i < 100; $i++) {
$fp = fopen('/dev/null', "w");
curl_setopt($ch, CURLOPT_URL,
'http://debug.atensoftware.com/r.php?echo='.rand());
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
fclose($fp);
unset($fp);
print "$i-mem: ".(memory_get_usage() - $startmem)." bytes\n";
}
?>
Expected result:
----------------
The memory usage should not increase after each request.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=45161&edit=1