Hi,

I had strange situation here today. I have added a $r->pool cleanup like:

    $r->pool->cleanup_register
        (sub {
             my ($r)=@_;
             use Data::Dumper;
             warn Dumper $r->pnotes;
         }, $r);

At that time there were no pnotes present.

Later I added pnotes the usual way $r->pnotes->{...}=...

Then I wondered why my pool cleanup function didn't show any notes.

After a few hours it occurred to me. The pnotes cleaner is also a pool 
cleanup. So it depends on the registration order. Well almost since elements 
in the cleanup queue can become invalid when a cleanup is killed. Later such 
elements can be reused. So generally a certain order cannot be assumed.

But in my case, adding a single pnotes() call *before* registering the cleanup 
solved the problem:

    $r->pnotes;
    $r->pool->cleanup_register
        (sub {
             my ($r)=@_;
             use Data::Dumper;
             warn Dumper $r->pnotes;
         }, $r);

Suddenly, the notes were shown.

Now, this seems like a bug to me.

Modern APR versions know about pre_cleanup functions that are run in the first 
place in apr_pool_clear.

Should we support them separately as APR::Pool->pre_cleanup_register or should 
we simply move our pool cleanups to the pre_cleanup stage?

I think the former is more appropriate.

In the mean time use $r->notes in such cases or perhaps
$r->connection->pnotes.

Torsten Förtsch

-- 
Need professional modperl support? Hire me! (http://foertsch.name)

Like fantasy? http://kabatinte.net

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@perl.apache.org
For additional commands, e-mail: dev-h...@perl.apache.org

Reply via email to