#45178 [Csd]: garbage collector and cyclic references
ID: 45178
User updated by: thomas dot jarosch at intra2net dot com
Reported By: thomas dot jarosch at intra2net dot com
Status: Closed
Bug Type: Reproducible crash
Operating System: Linux
PHP Version: 5.3CVS-2008-06-04 (snap)
Assigned To: dmitry
New Comment:
Thanks, Dmitry! Your fix works fine for both bugs.
Previous Comments:
------------------------------------------------------------------------
[2008-07-24 13:38:22] dmitry@php.net
This bug has been fixed in CVS.
Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
Thank you for the report, and for helping us make PHP better.
------------------------------------------------------------------------
[2008-07-16 13:20:31] thomas dot jarosch at intra2net dot com
Thanks for looking into this, Dmitry!
So there are actually two problems, one memory corruption reported
here and one memory leak report in #33595 or are they both memory
corruptions?
------------------------------------------------------------------------
[2008-07-15 11:42:00] dmitry@php.net
The simplest case for this memory corruption.
<?php
class Foo {
function Foo() {
$this->error = array($this,$this);
}
}
$a =& new Foo();
------------------------------------------------------------------------
[2008-07-15 07:37:50] dmitry@php.net
At first, you have a serious issue in your code. "static" variables
MUST NOT be asigned by reference, because they are already references.
As result the singleton pattern just doesn't work. BTW the bug is really
exists. The simplified test case follows(changing "=& new" into "= new"
fixes memory corruption).
<?php
class Horde_History {
function raiseError() {
return debug_backtrace();
}
function Horde_History() {
$this->error = $this->raiseError();
echo "Memory usage: " . memory_get_usage() . "\n";
}
}
for ($i=0;$i<100000;$i++) {
$a =& new Horde_History();
}
?>
------------------------------------------------------------------------
[2008-06-05 09:13:20] thomas dot jarosch at intra2net dot com
Actually, the reproduce code from #33595 also leaks memory.
The statement about Horde is not 100% correct as only some singleton
functions are affected. I mixed it up with another reference problem
I fixed a while ago. Nontheless memory is leaked :-)
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/45178
--
Edit this bug report at http://bugs.php.net/?id=45178&edit=1
Thread (9 messages)