Edit report at http://bugs.php.net/bug.php?id=52536&edit=1
ID: 52536
User updated by: aikar at aikar dot co
Reported by: aikar at aikar dot co
Summary: array_shift memory leak.
-Status: Open
+Status: Closed
Type: Bug
Package: Performance problem
Operating System: CentOS 5.3
PHP Version: 5.3.3
Block user comment: N
New Comment:
Sorry, upon furthur review i noticed the memory does stop rising
eventually, and
found my memory "leak" to be a flaw somewhere else that took it up
high.
closing since this isnt a bug.
Previous Comments:
------------------------------------------------------------------------
[2010-08-04 22:43:22] aikar at aikar dot co
Description:
------------
array_shift is causing a memory leak when used.
Take the following code:
if (count($write->writeBuffer))
{
$data = array_shift($write->writeBuffer);
$written = fwrite($stream, $data);
if ($written !== FALSE)
{
if ($written < strlen($data))
{
array_unshift($write->writeBuffer, substr($data,
$written));
}
}
}
When running under as a daemon process, memory will continue to rise
with this
code.
However, simply changing the code to:
if (count($write->writeBuffer))
{
//print_r($write);
$data = reset($write->writeBuffer);
$key = key($write->writeBuffer);
//echo "writing data: $data\n";
$written = fwrite($stream, $data);
if ($written !== FALSE)
{
if ($written < strlen($data))
{
$write->writeBuffer[$key] = substr($data,
$written);
} else
{
unset($write->writeBuffer[$key]);
}
}
}
Fixes the problem and no longer leaks and stays at a steady number.
Test script:
---------------
requires a long running process that repeatedly calls array_shift to
demonstrate
Expected result:
----------------
Memory to be freed that is used for the array_shift operation.
Actual result:
--------------
Memory is not freed upon use and contiously climbs in total memory
consumption by
the PHP process.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=52536&edit=1