#36847 [Opn->Csd]: debug_backtrace() result is not unset and eats memory

From: Date: Mon, 20 Aug 2007 12:24:16 +0000
Subject: #36847 [Opn->Csd]: debug_backtrace() result is not unset and eats memory
References: 1  Groups: php.doc 
Request: Send a blank email to phpdoc+get-969377762@lists.php.net to get a copy of this message
ID: 36847 Updated by: vrana@php.net Reported By: toggg@php.net -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] dmitry@php.net __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] toggg@php.net 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] dmitry@php.net 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] toggg@php.net 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] tony2001@php.net 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

« previous php.doc (#969377762) next »