cvs commit: modperl-2.0/src/modules/perl modperl_callback.c modperl_callback.h modperl_handler.c modperl_handler.h modperl_types.h
dougm 01/03/16 09:23:31 Modified:src/modules/perl modperl_callback.c modperl_callback.h modperl_handler.c modperl_handler.h modperl_types.h Log: prototype the 3 pools in run_handlers() rather that use va_args, so we can have a pool sooner rather than later pass lookup_hanalders() an lvalue arg and pool so it can create the handler array if needed add handler vectors to per-request config (will be used for set/push handlers) Revision ChangesPath 1.35 +38 -51modperl-2.0/src/modules/perl/modperl_callback.c Index: modperl_callback.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_callback.c,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- modperl_callback.c2001/03/16 06:57:42 1.34 +++ modperl_callback.c2001/03/16 17:23:23 1.35 @@ -91,8 +91,11 @@ return status; } -int modperl_callback_run_handlers(int idx, request_rec *r, conn_rec *c, - server_rec *s, int type, ...) +int modperl_callback_run_handlers(int idx, int type, + request_rec *r, conn_rec *c, server_rec *s, + apr_pool_t *pconf, + apr_pool_t *plog, + apr_pool_t *ptemp) { #ifdef USE_ITHREADS pTHX; @@ -105,7 +108,6 @@ MpAV *av, **avp; int i, status = OK; const char *desc = NULL; -va_list args; AV *av_args = Nullav; if (!MpSrvENABLED(scfg)) { @@ -114,8 +116,15 @@ return DECLINED; } -avp = modperl_handler_lookup_handlers(dcfg, scfg, NULL, - type, idx, desc); +if (r || c) { +p = c ? c-pool : r-pool; +} +else { +p = pconf; +} + +avp = modperl_handler_lookup_handlers(dcfg, scfg, NULL, p, + type, idx, FALSE, desc); if (!(avp (av = *avp))) { MP_TRACE_h(MP_FUNC, "no %s handlers configured (%s)\n", @@ -128,7 +137,6 @@ c = r-connection; } if (r || c) { -p = c ? c-pool : r-pool; interp = modperl_interp_select(r, c, s); aTHX = interp-perl; } @@ -150,39 +158,17 @@ "Apache::Connection", c, NULL); break; case MP_HANDLER_TYPE_FILES: - { - apr_pool_t *pconf, *plog, *ptemp; - - va_start(args, type); - pconf = va_arg(args, apr_pool_t *); - plog = va_arg(args, apr_pool_t *); - ptemp = va_arg(args, apr_pool_t *); - va_end(args); - - modperl_handler_make_args(aTHX_ av_args, -"Apache::Pool", pconf, -"Apache::Pool", plog, -"Apache::Pool", ptemp, -"Apache::Server", s, NULL); - } - break; +modperl_handler_make_args(aTHX_ av_args, + "Apache::Pool", pconf, + "Apache::Pool", plog, + "Apache::Pool", ptemp, + "Apache::Server", s, NULL); +break; case MP_HANDLER_TYPE_PROCESS: - { - apr_pool_t *pconf; - - va_start(args, type); - pconf = va_arg(args, apr_pool_t *); - va_end(args); - - if (!p) { - p = pconf; - } - - modperl_handler_make_args(aTHX_ av_args, -"Apache::Pool", pconf, -"Apache::Server", s, NULL); - } - break; +modperl_handler_make_args(aTHX_ av_args, + "Apache::Pool", pconf, + "Apache::Server", s, NULL); +break; }; MP_TRACE_h(MP_FUNC, "running %d %s handlers\n", @@ -212,36 +198,37 @@ int modperl_callback_per_dir(int idx, request_rec *r) { -return modperl_callback_run_handlers(idx, r, NULL, - r-server, - MP_HANDLER_TYPE_PER_DIR); +return modperl_callback_run_handlers(idx, MP_HANDLER_TYPE_PER_DIR, + r, NULL, r-server, + NULL, NULL, NULL); } int modperl_callback_per_srv(int idx, request_rec *r) { -return modperl_callback_run_handlers(idx, r, NULL, -
cvs commit: modperl-2.0/xs/Apache/ServerUtil - New directory
dougm 01/03/16 21:59:45 modperl-2.0/xs/Apache/ServerUtil - New directory
cvs commit: modperl-2.0/xs/maps apache_functions.map
dougm 01/03/16 22:03:38 Modified:lib/ModPerl Code.pm src/modules/perl modperl_callback.c modperl_config.h modperl_handler.c modperl_handler.h modperl_mgv.c modperl_mgv.h xs/Apache/RequestUtil Apache__RequestUtil.h xs/maps apache_functions.map Added: xs/Apache/ServerUtil Apache__ServerUtil.h Log: implement ${r,s}-{push,set,get}_handlers} Revision ChangesPath 1.51 +1 -1 modperl-2.0/lib/ModPerl/Code.pm Index: Code.pm === RCS file: /home/cvs/modperl-2.0/lib/ModPerl/Code.pm,v retrieving revision 1.50 retrieving revision 1.51 diff -u -r1.50 -r1.51 --- Code.pm 2001/03/16 07:30:21 1.50 +++ Code.pm 2001/03/17 06:03:37 1.51 @@ -92,7 +92,7 @@ Srv = [qw(NONE CLONE PARENT ENABLED AUTOLOAD), @hook_flags, 'UNSET'], Dir = [qw(NONE SEND_HEADER SETUP_ENV UNSET)], Interp = [qw(NONE IN_USE PUTBACK CLONED BASE)], -Handler = [qw(NONE PARSED METHOD OBJECT ANON AUTOLOAD)], +Handler = [qw(NONE PARSED METHOD OBJECT ANON AUTOLOAD DYNAMIC)], ); my %flags_lookup = map { $_,1 } qw(Srv Dir); 1.36 +4 -2 modperl-2.0/src/modules/perl/modperl_callback.c Index: modperl_callback.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_callback.c,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- modperl_callback.c2001/03/16 17:23:23 1.35 +++ modperl_callback.c2001/03/17 06:03:37 1.36 @@ -9,7 +9,7 @@ int count, status; #ifdef USE_ITHREADS -if (p !MpHandlerPARSED(handler)) { +if (p !MpHandlerPARSED(handler) !MpHandlerDYNAMIC(handler)) { MP_dSCFG(s); if (scfg-threaded_mpm) { /* @@ -103,6 +103,7 @@ #endif MP_dSCFG(s); MP_dDCFG; +MP_dRCFG; modperl_handler_t **handlers; apr_pool_t *p = NULL; MpAV *av, **avp; @@ -123,7 +124,7 @@ p = pconf; } -avp = modperl_handler_lookup_handlers(dcfg, scfg, NULL, p, +avp = modperl_handler_lookup_handlers(dcfg, scfg, rcfg, p, type, idx, FALSE, desc); if (!(avp (av = *avp))) { @@ -171,6 +172,7 @@ break; }; +/* XXX: deal with {push,set}_handler of the phase we're currently in */ MP_TRACE_h(MP_FUNC, "running %d %s handlers\n", av-nelts, desc); handlers = (modperl_handler_t **)av-elts; 1.24 +4 -0 modperl-2.0/src/modules/perl/modperl_config.h Index: modperl_config.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_config.h,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- modperl_config.h 2001/03/16 06:35:18 1.23 +++ modperl_config.h 2001/03/17 06:03:37 1.24 @@ -37,6 +37,10 @@ (r ? (modperl_config_dir_t *) \ ap_get_module_config(r-per_dir_config, perl_module) : NULL) +#define modperl_config_dir_get_defaults(s) \ + (modperl_config_dir_t *) \ + ap_get_module_config(s-lookup_defaults, perl_module) + #define MP_dDCFG \ modperl_config_dir_t *dcfg = modperl_config_dir_get(r) 1.6 +216 -5modperl-2.0/src/modules/perl/modperl_handler.c Index: modperl_handler.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_handler.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- modperl_handler.c 2001/03/16 17:23:24 1.5 +++ modperl_handler.c 2001/03/17 06:03:37 1.6 @@ -64,41 +64,252 @@ #define set_desc(dtype) \ MP_TRACE_a_do(if (desc) *desc = modperl_handler_desc_##dtype(idx)) +#define check_modify(dtype) \ +if ((action MP_HANDLER_ACTION_GET) rcfg) { \ +dTHX; \ +Perl_croak(aTHX_ "too late to modify %s handlers", \ + modperl_handler_desc_##dtype(idx)); \ +} + +/* + * generic function to lookup handlers for use in modperl_callback(), + * $r-{push,set,get}_handlers, $s-{push,set,get}_handlers + * $s-push/set at startup time are the same as configuring Perl*Handlers + * $r-push/set at request time will create entries in r-request_config + * push will first merge with configured handlers, unless an entry + * in r-request_config already exists. in this case, push or set has + * already been called for the given handler, + * r-request_config entries then override those in r-per_dir_config + */ + MpAV **modperl_handler_lookup_handlers(modperl_config_dir_t *dcfg,
cvs commit: modperl-2.0/src/modules/perl modperl_cmd.c
dougm 01/03/16 22:08:05 Modified:src/modules/perl modperl_cmd.c Log: make use of modperl_handler_array_ macros Revision ChangesPath 1.2 +2 -2 modperl-2.0/src/modules/perl/modperl_cmd.c Index: modperl_cmd.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_cmd.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- modperl_cmd.c 2001/03/16 05:52:29 1.1 +++ modperl_cmd.c 2001/03/17 06:08:05 1.2 @@ -6,13 +6,13 @@ modperl_handler_t *h = modperl_handler_new(p, name); if (!*handlers) { -*handlers = apr_array_make(p, 1, sizeof(modperl_handler_t *)); +*handlers = modperl_handler_array_new(p); MP_TRACE_d(MP_FUNC, "created handler stack\n"); } /* XXX parse_handler if Perl is running */ -*(modperl_handler_t **)apr_array_push(*handlers) = h; +modperl_handler_array_push(*handlers, h); MP_TRACE_d(MP_FUNC, "pushed handler: %s\n", h-name); return NULL;