#45161 [Opn]: humbads

From: Date: Tue, 03 Jun 2008 16:07:04 +0000
Subject: #45161 [Opn]: humbads
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-125462@lists.php.net to get a copy of this message
 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



Thread (10 messages)

« previous php.bugs (#125462) next »