Stas Bekman <[EMAIL PROTECTED]> writes:

[...]

> Scope of pools is a tricky thing. So all the APIs relying on a user
> providing the pool explicitly are potentially problematic at the moment.

+1.


[...more late night gibberish from me...]

> > Here somebody would need to call APR::Pool->DESTROY
> > to actually relinquish the last pool.
> 
> Only the last one? I'm not quite sure how are you going to clean up
> the pool of pools. How do you know that you pop the right pool?

Sorry, please forget it- my "flyweight" suggestion makes no 
sense whatsoever for this problem.

> What really needs to happen is to make the $pool object (or the temp)
> be tied to the object it belongs to ($apreq, $r, etc) and
> automatically get its refcount to 0 when the corresponding parent
> object goes out of scope. Which I suppose can be done with a simple
> DESTROY method. So when we accept the pool object we bump up its ref
> count and when DESTROY is called it'll decrement this count (this is
> because there could be more than one object using the same pool). 
> 
> I saw your commit -- if I understand it correctly, you try to make it
> dependent on the parent, so it won't get its refcount to 0 before the
> parent go away, right?

Correct.  It's exactly like doing this:

  package Mine;
  sub new {
        my ($class, $parent) = @_;
       bless { my_stuff=> "blah", my_parent => $parent}, $class;
  }

except that in apreq2 I stuffed the parent into a previously unused 
SvMAGIC slot.  I think the same plan will work for APR:: objects that need
a pool for their construction (in fact I'm wondering if all the WrapXS
machinery can't be put to use for this).


-- 
Joe Schaefer


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to