ID:               46790
 Updated by:       [EMAIL PROTECTED]
 Reported By:      o_O_Tync at mail dot ru
 Status:           Bogus
 Bug Type:         Class/Object related
 Operating System: Win, FreeBSD
 PHP Version:      5.2.7
 New Comment:

I should also add that you can check your phpinfo() to see if
zend.enable_gc is enabled, if not then add it to php.ini

You then only need to call gc_collect_cycles() to run the garbage
collector, it also runs automatically at certain times.


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

[2008-12-07 15:33:07] [EMAIL PROTECTED]

Sorry, but your problem does not imply a bug in PHP itself.  For a
list of more appropriate places to ask for help using PHP, please
visit http://www.php.net/support.php as this bug system is not the
appropriate forum for asking support questions.  Due to the volume
of reports we can not explain in detail here why your report is not
a bug.  The support channels will be able to provide an explanation
for you.

Thank you for your interest in PHP.

You have a cyclic reference here, even when you unset $obj1 and $obj2
there are still references to each other that exist.

However PHP 5.3 has a garbage collector which will correctly deal with
this.

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

[2008-12-07 13:18:16] o_O_Tync at mail dot ru

>php.exe -v
PHP 5.3.0alpha4-dev (cli) (built: Dec  6 2008 17:07:05)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2008 Zend Technologies

Without the 'this helps' line
>php.exe -f memleak.php
Mem: 1166 Kb

With the 'this helps' line
>php.exe -f memleak.php
Mem: 321 Kb

The problem remains

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

[2008-12-07 07:13:01] [EMAIL PROTECTED]

Please try using this CVS snapshot:

  http://snaps.php.net/php5.3-latest.tar.gz
 
For Windows:

  http://windows.php.net/snapshots/



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

[2008-12-07 06:34:02] o_O_Tync at mail dot ru

Description:
------------
I've come across a memory leak: garbage collector failes to free memory
occupied by linked objects, such as:

$obj1->pair = $obj2; $obj2->pair = $obj1;

Below goes the problematic piece of code: over many iterations - it
occupies a lot of memory.

If we comment 'line1' or 'line2' or both - memory is okay (48 Kb), but
cross-linking reveals a bug (839 Kb) despite of explicit unsetting.
The commented 'this helps' line solves the problem.

Tested under WinXP, and FreeBSD 6.1 using the latest PHP 5.2.7

Reproduce code:
---------------
<?php
class Paired
        {
        /** Paired object
         * @var Paired
         */
        public $pair;
        }

for ($i=0;$i<2000;$i++)
        {
        $obj1 = new Paired; $obj2 = new Paired;
        $obj1->pair = $obj2; // 'line1'
        $obj2->pair = $obj1; // 'line2'
        // $obj1->pair = null; $obj2->pair = null; // this helps
        unset($obj1); unset($obj2); // Explicitly
        }

print 'Mem: '.floor(memory_get_usage()/1024).' Kb';
?>

Expected result:
----------------
Mem: 48 Kb

Actual result:
--------------
Mem: 839 Kb


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


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

Reply via email to