Skip to content

Commit 49b3b07

Browse files
author
Steve Hay
committed
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 ........ git-svn-id: https://svn.apache.org/repos/asf/perl/modperl/branches/httpd24threading@1537779 13f79535-47bb-0310-9956-ffa450edef68
1 parent 4ae2881 commit 49b3b07

File tree

5 files changed

+30
-32
lines changed

5 files changed

+30
-32
lines changed

src/modules/perl/mod_perl.c

+4-2
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,10 @@ PerlInterpreter *modperl_startup(server_rec *s, apr_pool_t *p)
216216
server_rec *base_server = modperl_global_get_server_rec();
217217
const char *desc = modperl_server_desc(s, p);
218218
if (base_server == s) {
219+
MP_init_status = 1; /* temporarily reset MP_init_status */
219220
MP_TRACE_i(MP_FUNC,
220221
"starting the parent perl for the base server", desc);
222+
MP_init_status = 2;
221223
}
222224
else {
223225
MP_TRACE_i(MP_FUNC,
@@ -441,12 +443,12 @@ void modperl_init(server_rec *base_server, apr_pool_t *p)
441443
{
442444
server_rec *s;
443445
PerlInterpreter *base_perl;
444-
#ifdef MP_TRACE
446+
#if defined(MP_TRACE) || defined(USE_ITHREADS)
445447
modperl_config_srv_t *base_scfg = modperl_config_srv_get(base_server);
448+
#endif
446449

447450
MP_TRACE_d_do(MpSrv_dump_flags(base_scfg,
448451
base_server->server_hostname));
449-
#endif /* MP_TRACE */
450452

451453
#ifndef USE_ITHREADS
452454
if (modperl_threaded_mpm()) {

src/modules/perl/modperl_common_log.c

+9-3
Original file line numberDiff line numberDiff line change
@@ -52,21 +52,27 @@ void modperl_trace(const char *func, const char *fmt, ...)
5252
/* for more information on formatting codes see
5353
http://apr.apache.org/docs/apr/1.4/group__apr__lib.html#gad2cd3594aeaafd45931d1034965f48c1
5454
*/
55+
56+
/* PERL_GET_CONTEXT yields nonsense until the first interpreter is
57+
* created. Hence the modperl_is_running() question. */
5558
if (modperl_threaded_mpm()) {
5659
if (modperl_threads_started()) {
5760
apr_file_printf(logfile, "[pid=%lu, tid=%pt, perl=%pp] ",
5861
(unsigned long)getpid(),
59-
(void*)apr_os_thread_current(), PERL_GET_CONTEXT);
62+
(void*)apr_os_thread_current(),
63+
modperl_is_running() ? PERL_GET_CONTEXT : NULL);
6064
}
6165
else {
6266
apr_file_printf(logfile, "[pid=%lu, perl=%pp] ",
63-
(unsigned long)getpid(), PERL_GET_CONTEXT);
67+
(unsigned long)getpid(),
68+
modperl_is_running() ? PERL_GET_CONTEXT : NULL);
6469
}
6570
}
6671
else {
6772
#ifdef USE_ITHREADS
6873
apr_file_printf(logfile, "[pid=%lu, perl=%pp] ",
69-
(unsigned long)getpid(), PERL_GET_CONTEXT);
74+
(unsigned long)getpid(),
75+
modperl_is_running() ? PERL_GET_CONTEXT : NULL);
7076
#else
7177
apr_file_printf(logfile, "[pid=%lu] ", (unsigned long)getpid());
7278
#endif

src/modules/perl/modperl_config.h

-20
Original file line numberDiff line numberDiff line change
@@ -118,26 +118,6 @@ void modperl_set_perl_module_config(ap_conf_vector_t *cv, void *cfg);
118118
#define MP_dSCFG(s) \
119119
modperl_config_srv_t *scfg = modperl_config_srv_get(s)
120120

121-
#ifdef USE_ITHREADS
122-
# define MP_dSCFG_dTHX \
123-
dTHXa(scfg->mip->parent->perl); \
124-
PERL_SET_CONTEXT(aTHX)
125-
#else
126-
# define MP_dSCFG_dTHX dTHXa(scfg->perl)
127-
#endif
128-
129-
/* hopefully this macro will not need to be used often */
130-
#ifdef USE_ITHREADS
131-
# define MP_dTHX \
132-
modperl_interp_t *interp = \
133-
modperl_interp_select(r, r->connection, r->server); \
134-
dTHXa(interp->perl)
135-
# define MP_uTHX modperl_interp_unselect(interp)
136-
#else
137-
# define MP_dTHX dNOOP
138-
# define MP_uTHX dNOOP
139-
#endif
140-
141121
int modperl_config_apply_PerlModule(server_rec *s,
142122
modperl_config_srv_t *scfg,
143123
PerlInterpreter *perl, apr_pool_t *p);

src/modules/perl/modperl_handler.c

+7-1
Original file line numberDiff line numberDiff line change
@@ -345,9 +345,15 @@ void modperl_handler_make_args(pTHX_ AV **avp, ...)
345345
#define set_desc(dtype) \
346346
if (desc) *desc = modperl_handler_desc_##dtype(idx)
347347

348+
/* We should be able to use PERL_GET_CONTEXT here. The rcfg condition
349+
* makes sure there is a request being processed. The action > GET part
350+
* means it is a $r->set_handlers or $r->push_handlers operation. This
351+
* can only happen if called by perl code.
352+
*/
348353
#define check_modify(dtype) \
349354
if ((action > MP_HANDLER_ACTION_GET) && rcfg) { \
350-
MP_dSCFG_dTHX; \
355+
dTHXa(PERL_GET_CONTEXT); \
356+
MP_ASSERT(aTHX+0); \
351357
Perl_croak(aTHX_ "too late to modify %s handlers", \
352358
modperl_handler_desc_##dtype(idx)); \
353359
}

src/modules/perl/modperl_mgv.c

+10-6
Original file line numberDiff line numberDiff line change
@@ -476,10 +476,7 @@ static int modperl_hash_handlers_dir(apr_pool_t *p, server_rec *s,
476476
{
477477
int i;
478478
modperl_config_dir_t *dir_cfg = (modperl_config_dir_t *)cfg;
479-
#ifdef USE_ITHREADS
480-
MP_dSCFG(s);
481-
MP_dSCFG_dTHX;
482-
#endif
479+
dTHXa(data);
483480

484481
if (!dir_cfg) {
485482
return 1;
@@ -497,7 +494,7 @@ static int modperl_hash_handlers_srv(apr_pool_t *p, server_rec *s,
497494
{
498495
int i;
499496
modperl_config_srv_t *scfg = (modperl_config_srv_t *)cfg;
500-
MP_dSCFG_dTHX;
497+
dTHXa(data);
501498

502499
for (i=0; i < MP_HANDLER_NUM_PER_SRV; i++) {
503500
modperl_hash_handlers(aTHX_ p, s,
@@ -524,9 +521,16 @@ static int modperl_hash_handlers_srv(apr_pool_t *p, server_rec *s,
524521

525522
void modperl_mgv_hash_handlers(apr_pool_t *p, server_rec *s)
526523
{
527-
ap_pcw_walk_config(p, s, &perl_module, NULL,
524+
MP_dINTERPa(NULL, NULL, s);
525+
ap_pcw_walk_config(p, s, &perl_module,
526+
#ifdef USE_ITHREADS
527+
aTHX,
528+
#else
529+
NULL,
530+
#endif
528531
modperl_hash_handlers_dir,
529532
modperl_hash_handlers_srv);
533+
MP_INTERP_PUTBACK(interp, aTHX);
530534
}
531535

532536
/*

0 commit comments

Comments
 (0)