ID:               36847
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
-Status:           Open
+Status:           Closed
 Bug Type:         Documentation problem
 Operating System: fc3
 PHP Version:      5CVS-2006-03-24 (snap)
 New Comment:

'object' already documented.


Previous Comments:
------------------------------------------------------------------------

[2006-04-13 06:03:27] [EMAIL PROTECTED]

__destruct() is not called because object is not destroyed (it is still
referenced from inside). unset() just destroy reference to object from
variable $ret;

We need add information about 'object' field into  debug_backtrace()
documentation.

------------------------------------------------------------------------

[2006-04-12 12:48:21] [EMAIL PROTECTED]

OK, nice, that explains the difference to php4.
unset($res) is not sufficient ... obviously,

<?php
class test
{
    var $backtrace            = null;
    function test()
    {
        $this->backtrace = debug_backtrace();
        unset($this->backtrace[0]['object']);
    }
}
set_time_limit(0);
for($i = 0; $i <= 500000; $i++) {
    $ret = &new test();
    unset($ret);
} 
?> 

does not break anymore.

However, this circular reference is due to the new 'object' returned by
debug_backtrace() which is not documented.
It merits a *big* warning.

Also, it had been nice to be able to do it by __destruct() , but it's
not called by unset() ...

I report back to pear , thanks !

------------------------------------------------------------------------

[2006-04-12 11:58:42] [EMAIL PROTECTED]

Backtrace information that is returned from debug_backtrace() contains
reference to $this object. So this examle creates circular data
structure.

PHP cannot free circular structures at runtime and does free them on
request shutdown.

So this bug is the same as bug #33595 (recursive references leak
memory).

------------------------------------------------------------------------

[2006-03-26 06:09:54] [EMAIL PROTECTED]

This not the same situation as #33487
Here, it's not a question of local variable within a method.
And we actually unset the created object.
If I do the same with $this->backtrace = str_pad(' ', 2300); then the
memory is not eaten up.
This occurs only if debug_backtrace() result is affected to a property
of the test object.

------------------------------------------------------------------------

[2006-03-26 01:03:57] [EMAIL PROTECTED]

Duplicate of bug #33487.

------------------------------------------------------------------------

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/36847

-- 
Edit this bug report at http://bugs.php.net/?id=36847&edit=1

Reply via email to