while I can easily reproduce the problem with APR::Bucket::alloc_create(APR::Pool->new);
the case with setaside is not clear. I've tried the following:
+ # setaside + alloc_create on out-of-scope pools + { + my $data = "A" x 10; + my $orig = $data; + #$ba = APR::Bucket::alloc_create(APR::Pool->new); + my $b = APR::Bucket->new($ba, $data); + my $status = $b->setaside(APR::Pool->new); + ok t_cmp $status, 0, "setaside status";
+ # try to overwrite the temp pool data + require APR::Table; + my $table = APR::Table::make(APR::Pool->new, 50); + $table->set($_ => $_) for 'aa'..'za'; + + # now test that we are still OK + $b->read(my $read); + ok !t_cmp($read, $data, + "data inside the setaside bucket is unaffected by " . + "changes to the Perl variable it's created from"); + $b->destroy; + } + APR::Bucket::alloc_destroy($ba);
}
but it doesn't break. Further looking at the source code,
$b->setaside(APR::Pool->new);
doesn't replace $b to a new bucket allocation. I think this is why I can't reproduce the problem.
That wasn't correct.
Here is the real reason why the problem can't be created with a temp pool:
Index: xs/APR/Bucket/APR__Bucket.h
===================================================================
--- xs/APR/Bucket/APR__Bucket.h (revision 123827)
+++ xs/APR/Bucket/APR__Bucket.h (working copy)
@@ -112,8 +112,11 @@
if (GIMME_V == G_VOID && rc != APR_SUCCESS) {
modperl_croak(aTHX_ rc, "APR::Bucket::setaside");
}
-
- //mpxs_add_pool_magic(b_sv, p_sv);
-
+
+ /* No need to call mpxs_add_pool_magic(b_sv, p_sv); since
+ * pool_bucket_cleanup is called by apr_bucket_pool_make (called
+ * by modperl_bucket_sv_setaside) if the pool goes out of scope,
+ * copying the data to the heap.
+ */
return rc;
}so setaside does not need a special handling. I live the test that would have failed if it wasn't for apr internal's backup. so if it ever removed the test should catch it.
-- __________________________________________________________________ Stas Bekman JAm_pH ------> Just Another mod_perl Hacker http://stason.org/ mod_perl Guide ---> http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
