Author: stas
Date: Sun Dec  5 10:55:24 2004
New Revision: 109900

URL: http://svn.apache.org/viewcvs?view=rev&rev=109900
Log:
create a new subpool modperl_server_user_pool (from
modperl_server_pool), which is handed to users via
Apache::ServerUtil::base_server_pool(). This ensures that
user-registered cleanups are run *before* perl's internals cleanups
are run. (previously there was a problem with non-threaded perls which
were segfaulting on user cleanups, since perl was already gone by that
time).

Modified:
   perl/modperl/trunk/Changes
   perl/modperl/trunk/src/modules/perl/mod_perl.c
   perl/modperl/trunk/src/modules/perl/mod_perl.h
   perl/modperl/trunk/xs/Apache/ServerUtil/Apache__ServerUtil.h

Modified: perl/modperl/trunk/Changes
Url: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/Changes?view=diff&rev=109900&p1=perl/modperl/trunk/Changes&r1=109899&p2=perl/modperl/trunk/Changes&r2=109900
==============================================================================
--- perl/modperl/trunk/Changes  (original)
+++ perl/modperl/trunk/Changes  Sun Dec  5 10:55:24 2004
@@ -12,6 +12,14 @@
 
 =item 1.99_18-dev
 
+create a new subpool modperl_server_user_pool (from
+modperl_server_pool), which is handed to users via
+Apache::ServerUtil::base_server_pool(). This ensures that
+user-registered cleanups are run *before* perl's internals cleanups
+are run. (previously there was a problem with non-threaded perls which
+were segfaulting on user cleanups, since perl was already gone by that
+time). [Stas]
+
 Starting from ExtUtils::MakeMaker 6.22 it no longer generates
 pm_to_blib target, but pm_to_blib.ts, so needed to fix the glue_pod
 target, so install will work correctly [Stas]

Modified: perl/modperl/trunk/src/modules/perl/mod_perl.c
Url: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/src/modules/perl/mod_perl.c?view=diff&rev=109900&p1=perl/modperl/trunk/src/modules/perl/mod_perl.c&r1=109899&p2=perl/modperl/trunk/src/modules/perl/mod_perl.c&r2=109900
==============================================================================
--- perl/modperl/trunk/src/modules/perl/mod_perl.c      (original)
+++ perl/modperl/trunk/src/modules/perl/mod_perl.c      Sun Dec  5 10:55:24 2004
@@ -130,14 +130,26 @@
  * the parent process will run the cleanups since server_pool is a subpool
  * of pconf.  we manually clear the server_pool to run cleanups in the
  * child processes
+ *
+ * the "server_user_pool" is a subpool of the "server_pool", this is
+ * the pool which is exposed to users, so that they can register
+ * cleanup callbacks. This is needed so that the perl cleanups won't
+ * be run before user cleanups are executed.
+ *
  */
 static apr_pool_t *server_pool = NULL;
+static apr_pool_t *server_user_pool = NULL;
 
 apr_pool_t *modperl_server_pool(void)
 {
     return server_pool;
 }
 
+apr_pool_t *modperl_server_user_pool(void)
+{
+    return server_user_pool;
+}
+
 static void set_taint_var(PerlInterpreter *perl)
 {
     dTHXa(perl);
@@ -553,6 +565,9 @@
 
     apr_pool_create(&server_pool, pconf);
     apr_pool_tag(server_pool, "mod_perl server pool");
+
+    apr_pool_create(&server_user_pool, pconf);
+    apr_pool_tag(server_user_pool, "mod_perl server user pool");
 
     modperl_sys_init();
     apr_pool_cleanup_register(server_pool, NULL,

Modified: perl/modperl/trunk/src/modules/perl/mod_perl.h
Url: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/src/modules/perl/mod_perl.h?view=diff&rev=109900&p1=perl/modperl/trunk/src/modules/perl/mod_perl.h&r1=109899&p2=perl/modperl/trunk/src/modules/perl/mod_perl.h&r2=109900
==============================================================================
--- perl/modperl/trunk/src/modules/perl/mod_perl.h      (original)
+++ perl/modperl/trunk/src/modules/perl/mod_perl.h      Sun Dec  5 10:55:24 2004
@@ -120,6 +120,7 @@
                             apr_pool_t *ptemp);
 void modperl_register_hooks(apr_pool_t *p);
 apr_pool_t *modperl_server_pool(void);
+apr_pool_t *modperl_server_user_pool(void);
 PerlInterpreter *modperl_startup(server_rec *s, apr_pool_t *p);
 int modperl_perl_destruct_level(void);
 void xs_init(pTHX);

Modified: perl/modperl/trunk/xs/Apache/ServerUtil/Apache__ServerUtil.h
Url: 
http://svn.apache.org/viewcvs/perl/modperl/trunk/xs/Apache/ServerUtil/Apache__ServerUtil.h?view=diff&rev=109900&p1=perl/modperl/trunk/xs/Apache/ServerUtil/Apache__ServerUtil.h&r1=109899&p2=perl/modperl/trunk/xs/Apache/ServerUtil/Apache__ServerUtil.h&r2=109900
==============================================================================
--- perl/modperl/trunk/xs/Apache/ServerUtil/Apache__ServerUtil.h        
(original)
+++ perl/modperl/trunk/xs/Apache/ServerUtil/Apache__ServerUtil.h        Sun Dec 
 5 10:55:24 2004
@@ -15,7 +15,7 @@
 
 #define mpxs_Apache__ServerUtil_restart_count modperl_restart_count
 
-#define mpxs_Apache__ServerUtil_base_server_pool modperl_server_pool
+#define mpxs_Apache__ServerUtil_base_server_pool modperl_server_user_pool
 
 #define mpxs_Apache__ServerRec_method_register(s, methname)     \
     ap_method_register(s->process->pconf, methname);

Reply via email to