Geoffrey Young wrote:

So may be your orig patch from:
http://thread.gmane.org/gmane.comp.apache.mod-perl.devel/730
is the way to go,


well, if you mean the patch that started the thread, I seem to say there
that the patch keeps things from segfaulting, but that the callback isn't
actually run.  in other words, the patch didn't really work, but was
probably meant to be a starting point to something better.

Actually your patch, Geoff, was perfectly fine. It wasn't supposed to work for cleanups registered from the child processes, because child processes don't run cleanup handlers, because server_pool is cleaned internally w/o letting the parent pool destroy it (child_exit is a special case). But it works perfectly fine for parent process cleanup, but you need to register that in the parent process (i.e. at the server startup). See the modperl_extra.pl addition in the patch below. it logs the date twice on server start, i.e. every time server_pool is recreated.


So let me know where are we on this story.

Index: xs/maps/modperl_functions.map
===================================================================
--- xs/maps/modperl_functions.map       (revision 109257)
+++ xs/maps/modperl_functions.map       (working copy)
@@ -78,6 +78,7 @@

MODULE=Apache::ServerUtil PACKAGE=Apache::ServerRec
SV *:DEFINE_dir_config | | server_rec *:s, char *:key=NULL, SV *:sv_val=Nullsv
+ apr_pool_t:DEFINE_pool


 MODULE=Apache::ServerUtil PACKAGE=Apache::ServerUtil
  mpxs_Apache__ServerUtil_server_root_relative | | p, fname=""
Index: xs/Apache/ServerUtil/Apache__ServerUtil.h
===================================================================
--- xs/Apache/ServerUtil/Apache__ServerUtil.h   (revision 109257)
+++ xs/Apache/ServerUtil/Apache__ServerUtil.h   (working copy)
@@ -13,6 +13,8 @@
  * limitations under the License.
  */

+#define mpxs_Apache__ServerRec_pool modperl_server_pool
+
 #define mpxs_Apache__ServerRec_method_register(s, methname)    \
     ap_method_register(s->process->pconf, methname);

Index: t/conf/modperl_extra.pl
===================================================================
--- t/conf/modperl_extra.pl     (revision 109257)
+++ t/conf/modperl_extra.pl     (working copy)
@@ -49,8 +49,14 @@

 test_perl_ithreads();

+my $server_pool = Apache::ServerRec::pool();
+$server_pool->cleanup_register(
+    sub {
+        local %ENV;
+        qx[/bin/date >> /tmp/date];
+        Apache::OK;
+    });

-
 ### only subs below this line ###

 sub reorg_INC {
Index: t/response/TestAPI/server_util.pm
===================================================================
--- t/response/TestAPI/server_util.pm   (revision 109257)
+++ t/response/TestAPI/server_util.pm   (working copy)
@@ -29,7 +29,7 @@
 sub handler {
     my $r = shift;

-    plan $r, tests => 15;
+    plan $r, tests => 17;

     {
         my $s = $r->server;
@@ -48,6 +48,14 @@

     server_root_relative_tests($r);

+    my $server_pool = Apache::ServerRec::pool();
+    ok $server_pool->isa('APR::Pool');
+
+    # this will never run since it's not registered in the parent
+    # process
+    $server_pool->cleanup_register(sub { Apache::OK });
+    ok 1;
+
     Apache::OK;
 }



--
__________________________________________________________________
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]



Reply via email to