On Mon, December 4, 2006 7:21 pm, Arnold Daniels wrote:
> I'm struggling with the problem that cross-referenced objects don't
> get
> destroyed. I can off course write a method to break the
> cross-reference,
> but that's kind of a pain in the butt, especially if the
> cross-reference
> is not strait forward.

Seems to me that a simple unset() on the data members in userland
coude so PHPs refcount is decremented ought to do it...

If a user creates a monstrous data structure and doesn't prune it, how
much responsibility can PHP take for that?

But maybe I'm just being naive.

> To solve this I'm thinking of building one of 2 thing:
> 1.) Write a destroy() function which works much like a close function
> on
> a recourse, changing the object to a zval of type 'unknown'.
> 2.) Specify that a property of an object does not count for the
> reference count of a zval.

I don't think this is a Good Idea...

Seems like it would be WAY too easy for userland code to end up with a
0 for the refcount and then GC kicks in.

> 3.) Write code to find cross-references and destroy the objects still.
>
> The first solution should be quite easy to implement, but you need to
> call destroy() to free the object, introducing the whole alloc/free
> responsibility thing to PHP.

Just use unset() for this, rather than introduce yet another confusing
function.

> The second solution would require some extra keyword within the class,
> but require no special code within the code using the object. Though I
> wouldn't have a clue how how to implement this or what would be the
> consequences.

> I don't think the third solution is really possible or would at least
> cause performance problems.

Finding a "dead branch" of cyclic structures is basic CS stuff.

Add a second temp "refcount" and start walking the graph.

Either you end up with something known to be in the GLOBAL scope, or
you don't.

It can take a long time, depending on the size of the graph, but it's
just pointer-chasing and integer arithmetic, so shouldn't be THAT
slow.

-- 
Some people have a "gift" link here.
Know what I want?
I want you to buy a CD from some starving artist.
http://cdbaby.com/browse/from/lynch
Yeah, I get a buck. So?

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to