You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by st...@apache.org on 2013/11/01 01:33:25 UTC

svn commit: r1537779 - in /perl/modperl/branches/httpd24threading: ./ src/modules/perl/mod_perl.c src/modules/perl/modperl_common_log.c src/modules/perl/modperl_config.h src/modules/perl/modperl_handler.c src/modules/perl/modperl_mgv.c

Author: stevehay
Date: Fri Nov  1 00:33:25 2013
New Revision: 1537779

URL: http://svn.apache.org/r1537779
Log:
Merged revision(s) 1243554, 1243647, 1243679, 1245916, 1291304 from perl/modperl/branches/threading:
move interp allocation out of modperl_hash_handlers*()

These functions are called in a loop (modperl_mgv_hash_handlers()). Now,
the interp is allocated outside the loop.

........
drop unused MP_dTHX and MP_uTHX macros
........
eliminate MP_dSCFG_dTHX
........
suppress "perl=..." output in MP_TRACE output before the first interpreter has been started
........
fix missing base_scfg declaration in modperl_init() if USE_ITHREADS && !MP_TRACE
........

Modified:
    perl/modperl/branches/httpd24threading/   (props changed)
    perl/modperl/branches/httpd24threading/src/modules/perl/mod_perl.c
    perl/modperl/branches/httpd24threading/src/modules/perl/modperl_common_log.c
    perl/modperl/branches/httpd24threading/src/modules/perl/modperl_config.h
    perl/modperl/branches/httpd24threading/src/modules/perl/modperl_handler.c
    perl/modperl/branches/httpd24threading/src/modules/perl/modperl_mgv.c

Propchange: perl/modperl/branches/httpd24threading/
------------------------------------------------------------------------------
  Merged /perl/modperl/branches/threading:r1243554,1243647,1243679,1245916,1291304

Modified: perl/modperl/branches/httpd24threading/src/modules/perl/mod_perl.c
URL: http://svn.apache.org/viewvc/perl/modperl/branches/httpd24threading/src/modules/perl/mod_perl.c?rev=1537779&r1=1537778&r2=1537779&view=diff
==============================================================================
--- perl/modperl/branches/httpd24threading/src/modules/perl/mod_perl.c (original)
+++ perl/modperl/branches/httpd24threading/src/modules/perl/mod_perl.c Fri Nov  1 00:33:25 2013
@@ -216,8 +216,10 @@ PerlInterpreter *modperl_startup(server_
         server_rec *base_server = modperl_global_get_server_rec();
         const char *desc = modperl_server_desc(s, p);
         if (base_server == s) {
+            MP_init_status = 1; /* temporarily reset MP_init_status */
             MP_TRACE_i(MP_FUNC,
                        "starting the parent perl for the base server", desc);
+            MP_init_status = 2;
         }
         else {
             MP_TRACE_i(MP_FUNC,
@@ -441,12 +443,12 @@ void modperl_init(server_rec *base_serve
 {
     server_rec *s;
     PerlInterpreter *base_perl;
-#ifdef MP_TRACE
+#if defined(MP_TRACE) || defined(USE_ITHREADS)
     modperl_config_srv_t *base_scfg = modperl_config_srv_get(base_server);
+#endif
 
     MP_TRACE_d_do(MpSrv_dump_flags(base_scfg,
                                    base_server->server_hostname));
-#endif /* MP_TRACE */
 
 #ifndef USE_ITHREADS
     if (modperl_threaded_mpm()) {

Modified: perl/modperl/branches/httpd24threading/src/modules/perl/modperl_common_log.c
URL: http://svn.apache.org/viewvc/perl/modperl/branches/httpd24threading/src/modules/perl/modperl_common_log.c?rev=1537779&r1=1537778&r2=1537779&view=diff
==============================================================================
--- perl/modperl/branches/httpd24threading/src/modules/perl/modperl_common_log.c (original)
+++ perl/modperl/branches/httpd24threading/src/modules/perl/modperl_common_log.c Fri Nov  1 00:33:25 2013
@@ -52,21 +52,27 @@ void modperl_trace(const char *func, con
     /* for more information on formatting codes see
        http://apr.apache.org/docs/apr/1.4/group__apr__lib.html#gad2cd3594aeaafd45931d1034965f48c1
      */
+
+    /* PERL_GET_CONTEXT yields nonsense until the first interpreter is
+     * created. Hence the modperl_is_running() question. */
     if (modperl_threaded_mpm()) {
         if (modperl_threads_started()) {
             apr_file_printf(logfile, "[pid=%lu, tid=%pt, perl=%pp] ",
                             (unsigned long)getpid(),
-                            (void*)apr_os_thread_current(), PERL_GET_CONTEXT);
+                            (void*)apr_os_thread_current(),
+                            modperl_is_running() ? PERL_GET_CONTEXT : NULL);
         }
         else {
             apr_file_printf(logfile, "[pid=%lu, perl=%pp] ",
-                            (unsigned long)getpid(), PERL_GET_CONTEXT);
+                            (unsigned long)getpid(),
+                            modperl_is_running() ? PERL_GET_CONTEXT : NULL);
         }
     }
     else {
 #ifdef USE_ITHREADS
         apr_file_printf(logfile, "[pid=%lu, perl=%pp] ",
-                        (unsigned long)getpid(), PERL_GET_CONTEXT);
+                        (unsigned long)getpid(),
+                        modperl_is_running() ? PERL_GET_CONTEXT : NULL);
 #else
         apr_file_printf(logfile, "[pid=%lu] ", (unsigned long)getpid());
 #endif

Modified: perl/modperl/branches/httpd24threading/src/modules/perl/modperl_config.h
URL: http://svn.apache.org/viewvc/perl/modperl/branches/httpd24threading/src/modules/perl/modperl_config.h?rev=1537779&r1=1537778&r2=1537779&view=diff
==============================================================================
--- perl/modperl/branches/httpd24threading/src/modules/perl/modperl_config.h (original)
+++ perl/modperl/branches/httpd24threading/src/modules/perl/modperl_config.h Fri Nov  1 00:33:25 2013
@@ -118,26 +118,6 @@ void modperl_set_perl_module_config(ap_c
 #define MP_dSCFG(s)                                             \
     modperl_config_srv_t *scfg = modperl_config_srv_get(s)
 
-#ifdef USE_ITHREADS
-#   define MP_dSCFG_dTHX            \
-    dTHXa(scfg->mip->parent->perl); \
-    PERL_SET_CONTEXT(aTHX)
-#else
-#   define MP_dSCFG_dTHX dTHXa(scfg->perl)
-#endif
-
-/* hopefully this macro will not need to be used often */
-#ifdef USE_ITHREADS
-#   define MP_dTHX                                              \
-    modperl_interp_t *interp =                                  \
-        modperl_interp_select(r, r->connection, r->server);     \
-    dTHXa(interp->perl)
-#   define MP_uTHX modperl_interp_unselect(interp)
-#else
-#   define MP_dTHX dNOOP
-#   define MP_uTHX dNOOP
-#endif
-
 int modperl_config_apply_PerlModule(server_rec *s,
                                     modperl_config_srv_t *scfg,
                                     PerlInterpreter *perl, apr_pool_t *p);

Modified: perl/modperl/branches/httpd24threading/src/modules/perl/modperl_handler.c
URL: http://svn.apache.org/viewvc/perl/modperl/branches/httpd24threading/src/modules/perl/modperl_handler.c?rev=1537779&r1=1537778&r2=1537779&view=diff
==============================================================================
--- perl/modperl/branches/httpd24threading/src/modules/perl/modperl_handler.c (original)
+++ perl/modperl/branches/httpd24threading/src/modules/perl/modperl_handler.c Fri Nov  1 00:33:25 2013
@@ -345,9 +345,15 @@ void modperl_handler_make_args(pTHX_ AV 
 #define set_desc(dtype)                                 \
     if (desc) *desc = modperl_handler_desc_##dtype(idx)
 
+/* We should be able to use PERL_GET_CONTEXT here. The rcfg condition
+ * makes sure there is a request being processed. The action > GET part
+ * means it is a $r->set_handlers or $r->push_handlers operation. This
+ * can only happen if called by perl code.
+ */
 #define check_modify(dtype)                                     \
     if ((action > MP_HANDLER_ACTION_GET) && rcfg) {             \
-        MP_dSCFG_dTHX;                                          \
+        dTHXa(PERL_GET_CONTEXT);                                \
+        MP_ASSERT(aTHX+0);                                      \
         Perl_croak(aTHX_ "too late to modify %s handlers",      \
                    modperl_handler_desc_##dtype(idx));          \
     }

Modified: perl/modperl/branches/httpd24threading/src/modules/perl/modperl_mgv.c
URL: http://svn.apache.org/viewvc/perl/modperl/branches/httpd24threading/src/modules/perl/modperl_mgv.c?rev=1537779&r1=1537778&r2=1537779&view=diff
==============================================================================
--- perl/modperl/branches/httpd24threading/src/modules/perl/modperl_mgv.c (original)
+++ perl/modperl/branches/httpd24threading/src/modules/perl/modperl_mgv.c Fri Nov  1 00:33:25 2013
@@ -476,10 +476,7 @@ static int modperl_hash_handlers_dir(apr
 {
     int i;
     modperl_config_dir_t *dir_cfg = (modperl_config_dir_t *)cfg;
-#ifdef USE_ITHREADS
-    MP_dSCFG(s);
-    MP_dSCFG_dTHX;
-#endif
+    dTHXa(data);
 
     if (!dir_cfg) {
         return 1;
@@ -497,7 +494,7 @@ static int modperl_hash_handlers_srv(apr
 {
     int i;
     modperl_config_srv_t *scfg = (modperl_config_srv_t *)cfg;
-    MP_dSCFG_dTHX;
+    dTHXa(data);
 
     for (i=0; i < MP_HANDLER_NUM_PER_SRV; i++) {
         modperl_hash_handlers(aTHX_ p, s,
@@ -524,9 +521,16 @@ static int modperl_hash_handlers_srv(apr
 
 void modperl_mgv_hash_handlers(apr_pool_t *p, server_rec *s)
 {
-    ap_pcw_walk_config(p, s, &perl_module, NULL,
+    MP_dINTERPa(NULL, NULL, s);
+    ap_pcw_walk_config(p, s, &perl_module,
+#ifdef USE_ITHREADS
+                       aTHX,
+#else
+                       NULL,
+#endif
                        modperl_hash_handlers_dir,
                        modperl_hash_handlers_srv);
+    MP_INTERP_PUTBACK(interp, aTHX);
 }
 
 /*