Re: New destructors implementation

From: Date: Mon, 09 Feb 2004 17:14:09 +0000
Subject: Re: New destructors implementation
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-7672@lists.php.net to get a copy of this message
Stephane Drouard wrote:
Couldn't PHP destroy global objects by taking their refcount into account? All objects with refcount=1 are first destroyed, then all objects with refcount=2, and so on... Objects with a same refcount are destroyed in a random "order".
Be carreful, this does not resolve all things : $source1 = new stdClass ; $source2 = new stdClass ; $source3 = new stdClass ; $refLevel1 = new stdClass ; $refLevel2 = new stdClass ; $source1->ref = $refLevel1 ; $source2->ref = $refLevel1 ; $source3->ref = $refLevel1 ; $refLevel1->ref = $refLevel2 ; We have : refcount of 1 : $source1, $source2 and $source3 refcount of 2 : $refLevel2 ; refcount of 4 : $refLevel1 ; $refLevel1 as a refcount of 4 but should be destroyed before $refLevel2 (which has a refcount of 2). What we can do is : + while( there are $vars with refcount of 1 ) {
    - destruct this variables
    - if this variables references other vars, decrement their refcount
} + then destroy all the rest in random (which have circular dependendencies) This is NOT the same as destroy refcounts of 1, then refcount of 2, etc. Anyway I do not know how the engine deals (or can deal) with all that, I only write about theorical ways.

« previous php.internals (#7672) next »