cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 2002/09/04 10:56:51 Modified:src/modules/perl mod_perl.c Log: make sure MP_init_done is reset when we teardown. (should only matter for static linkage, but doesn't hurt with dso) Revision ChangesPath 1.137 +4 -2 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.136 retrieving revision 1.137 diff -u -r1.136 -r1.137 --- mod_perl.c4 Sep 2002 17:51:02 - 1.136 +++ mod_perl.c4 Sep 2002 17:56:50 - 1.137 -354,8 +354,12 return APR_SUCCESS; } +static int MP_init_done = 0; + static apr_status_t modperl_sys_term(void *data) { +MP_init_done = 0; + modperl_env_unload(); modperl_perl_pp_unset_all(); -365,8 +369,6 #endif return APR_SUCCESS; } - -static int MP_init_done = 0; int modperl_hook_init(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 2002/07/10 19:06:11 Modified:src/modules/perl mod_perl.c Log: fix for non-ithread perls Revision ChangesPath 1.131 +1 -1 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.130 retrieving revision 1.131 diff -u -r1.130 -r1.131 --- mod_perl.c29 Jun 2002 20:38:33 - 1.130 +++ mod_perl.c11 Jul 2002 02:06:11 - 1.131 -654,8 +654,8 MP_dDCFG; GV *h_stdin, *h_stdout; int retval; -#ifdef USE_ITHREADS MP_dRCFG; +#ifdef USE_ITHREADS pTHX; modperl_interp_t *interp; #endif
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_cgi.c modperl_filter.c modperl_types.h
dougm 2002/06/29 13:38:33 Modified:src/modules/perl mod_perl.c modperl_cgi.c modperl_filter.c modperl_types.h Log: add support for redirects with PerlOptions +ParseHeaders Revision ChangesPath 1.130 +7 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.129 retrieving revision 1.130 diff -u -r1.129 -r1.130 --- mod_perl.c28 Jun 2002 19:15:51 - 1.129 +++ mod_perl.c29 Jun 2002 20:38:33 - 1.130 -709,6 +709,13 /* flush output buffer after interpreter is putback */ modperl_response_finish(r); +switch (rcfg-status) { + case HTTP_MOVED_TEMPORARILY: +/* set by modperl_cgi_header_parse */ +retval = HTTP_MOVED_TEMPORARILY; +break; +} + return retval; } 1.2 +33 -0 modperl-2.0/src/modules/perl/modperl_cgi.c Index: modperl_cgi.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_cgi.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- modperl_cgi.c 8 May 2001 18:04:36 - 1.1 +++ modperl_cgi.c 29 Jun 2002 20:38:33 - 1.2 -5,6 +5,7 { int status; int termarg; +const char *location; if (!buffer) { return DECLINED; -12,6 +13,38 status = ap_scan_script_header_err_strs(r, NULL, bodytext, termarg, buffer, NULL); + +/* code below from mod_cgi.c */ +location = apr_table_get(r-headers_out, Location); + +if (location (location[0] == '/') (r-status == 200)) { +r-method = apr_pstrdup(r-pool, GET); +r-method_number = M_GET; + +/* We already read the message body (if any), so don't allow + * the redirected request to think it has one. We can ignore + * Transfer-Encoding, since we used REQUEST_CHUNKED_ERROR. + */ +apr_table_unset(r-headers_in, Content-Length); + +ap_internal_redirect_handler(location, r); + +return OK; +} +else if (location (r-status == 200)) { +MP_dRCFG; + +/* Note that if a script wants to produce its own Redirect + * body, it now has to explicitly *say* Status: 302 + */ + +/* XXX: this is a hack. + * filter return value doesn't seem to impact anything. + */ +rcfg-status = HTTP_MOVED_TEMPORARILY; + +return HTTP_MOVED_TEMPORARILY; +} return status; } 1.36 +4 -1 modperl-2.0/src/modules/perl/modperl_filter.c Index: modperl_filter.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_filter.c,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- modperl_filter.c 30 May 2002 02:33:48 - 1.35 +++ modperl_filter.c 29 Jun 2002 20:38:33 - 1.36 -14,7 +14,10 const char *bodytext = NULL; int status = modperl_cgi_header_parse(r, (char *)buf, bodytext); -if (status != OK) { +if (status == HTTP_MOVED_TEMPORARILY) { +return APR_SUCCESS; /* XXX: HTTP_MOVED_TEMPORARILY ? */ +} +else if (status != OK) { ap_log_error(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, r-server, %s did not send an HTTP header, r-uri); 1.60 +1 -0 modperl-2.0/src/modules/perl/modperl_types.h Index: modperl_types.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_types.h,v retrieving revision 1.59 retrieving revision 1.60 diff -u -r1.59 -r1.60 --- modperl_types.h 21 Jun 2002 03:02:54 - 1.59 +++ modperl_types.h 29 Jun 2002 20:38:33 - 1.60 -205,6 +205,7 HV *pnotes; SV *global_request_obj; U8 flags; +int status; modperl_wbucket_t *wbucket; MpAV *handlers_per_dir[MP_HANDLER_NUM_PER_DIR]; MpAV *handlers_per_srv[MP_HANDLER_NUM_PER_SRV];
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_interp.c modperl_util.c modperl_util.h
dougm 2002/06/20 17:44:24 Modified:src/modules/perl mod_perl.c modperl_interp.c modperl_util.c modperl_util.h Log: use our own modperl_sys_dlclose instead of apr_dso_unload which requires us to create our own pool. Revision ChangesPath 1.127 +3 -5 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.126 retrieving revision 1.127 diff -u -r1.126 -r1.127 --- mod_perl.c16 Jun 2002 01:07:37 - 1.126 +++ mod_perl.c21 Jun 2002 00:44:24 - 1.127 -5,18 +5,16 { modperl_cleanup_data_t *cdata = (modperl_cleanup_data_t *)data; PerlInterpreter *perl = (PerlInterpreter *)cdata-data; -apr_array_header_t *handles; +void **handles; -handles = modperl_xs_dl_handles_get(aTHX_ cdata-pool); +handles = modperl_xs_dl_handles_get(aTHX); MP_TRACE_i(MP_FUNC, destroying interpreter=0x%lx\n, (unsigned long)perl); modperl_perl_destruct(perl); -if (handles) { -modperl_xs_dl_handles_close(cdata-pool, handles); -} +modperl_xs_dl_handles_close(handles); modperl_env_unload(); 1.47 +3 -14 modperl-2.0/src/modules/perl/modperl_interp.c Index: modperl_interp.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_interp.c,v retrieving revision 1.46 retrieving revision 1.47 diff -u -r1.46 -r1.47 --- modperl_interp.c 17 Jun 2002 20:00:44 - 1.46 +++ modperl_interp.c 21 Jun 2002 00:44:24 - 1.47 -80,8 +80,7 void modperl_interp_destroy(modperl_interp_t *interp) { -apr_pool_t *p = NULL; -apr_array_header_t *handles; +void **handles; dTHXa(interp-perl); PERL_SET_CONTEXT(interp-perl); -93,21 +92,11 MP_TRACE_i(MP_FUNC, *error - still in use!*\n); } -/* we cant use interp-mip-ap_pool without locking - * apr_pool_create() will mutex lock for us - * XXX: could roll something without using apr_pool_t - * to avoid locking - */ -(void)apr_pool_create(p, NULL); -handles = modperl_xs_dl_handles_get(aTHX_ p); +handles = modperl_xs_dl_handles_get(aTHX); modperl_perl_destruct(interp-perl); -if (handles) { -modperl_xs_dl_handles_close(p, handles); -} - -apr_pool_destroy(p); +modperl_xs_dl_handles_close(handles); } apr_status_t modperl_interp_cleanup(void *data) 1.47 +12 -13modperl-2.0/src/modules/perl/modperl_util.c Index: modperl_util.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_util.c,v retrieving revision 1.46 retrieving revision 1.47 diff -u -r1.46 -r1.47 --- modperl_util.c19 Jun 2002 05:18:04 - 1.46 +++ modperl_util.c21 Jun 2002 00:44:24 - 1.47 -300,12 +300,12 } } -apr_array_header_t *modperl_xs_dl_handles_get(pTHX_ apr_pool_t *p) +void **modperl_xs_dl_handles_get(pTHX) { I32 i; AV *librefs = get_av(dl_librefs, FALSE); AV *modules = get_av(dl_modules, FALSE); -apr_array_header_t *handles; +void **handles; if (!librefs) { MP_TRACE_g(MP_FUNC, -319,7 +319,7 return NULL; } -handles = apr_array_make(p, AvFILL(librefs)-1, sizeof(void *)); +handles = (void **)malloc(sizeof(void *) * (AvFILL(librefs)+2)); for (i=0; i=AvFILL(librefs); i++) { void *handle; -337,17 +337,19 MP_TRACE_g(MP_FUNC, %s dl handle == 0x%lx\n, SvPVX(module_sv), (unsigned long)handle); if (handle) { - *(void **)apr_array_push(handles) = handle; + handles[i] = handle; } } av_clear(modules); av_clear(librefs); +handles[i] = (void *)0; + return handles; } -void modperl_xs_dl_handles_close(apr_pool_t *p, apr_array_header_t *handles) +void modperl_xs_dl_handles_close(void **handles) { int i; -355,15 +357,12 return; } -for (i=0; i handles-nelts; i++) { -apr_dso_handle_t *dso = NULL; -void *handle = ((void **)handles-elts)[i]; - -MP_TRACE_g(MP_FUNC, close 0x%lx\n, (unsigned long)handle); - -apr_os_dso_handle_put(dso, (apr_os_dso_handle_t )handle, p); -apr_dso_unload(dso); +for (i=0; handles[i]; i++) { +MP_TRACE_g(MP_FUNC, close 0x%lx\n, (unsigned long)handles[i]); +modperl_sys_dlclose(handles[i]); } + +free(handles); } modperl_cleanup_data_t
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_interp.c
dougm 2002/06/20 21:16:51 Modified:src/modules/perl mod_perl.c modperl_interp.c Log: move modperl_pp_{set,unset}_all and modperl_init_{init,unload} to modperl_sys_{init,term} functions that only happen once per-parent process Revision ChangesPath 1.128 +16 -5 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.127 retrieving revision 1.128 diff -u -r1.127 -r1.128 --- mod_perl.c21 Jun 2002 00:44:24 - 1.127 +++ mod_perl.c21 Jun 2002 04:16:51 - 1.128 -202,10 +202,6 return; } -modperl_perl_pp_set_all(); - -modperl_env_init(); - base_perl = modperl_startup(base_server, p); #ifdef USE_ITHREADS -330,6 +326,10 modperl_tls_create_request_rec(pconf); } +/* + * modperl_sys_{init,term} are things that happen + * once per-parent process, not per-interpreter + */ static apr_status_t modperl_sys_init(void) { #if 0 /*XXX*/ -345,11 +345,22 } #endif #endif + +/* modifies PL_ppaddr */ +modperl_perl_pp_set_all(); + +/* modifies PL_vtbl_env{elem} */ +modperl_env_init(); + return APR_SUCCESS; } static apr_status_t modperl_sys_term(void *data) { +modperl_env_unload(); + +modperl_perl_pp_unset_all(); + #if 0 /*XXX*/ PERL_SYS_TERM(); #endif -362,7 +373,7 apr_pool_create(server_pool, pconf); modperl_sys_init(); -apr_pool_cleanup_register(server_pool, NULL, +apr_pool_cleanup_register(pconf, NULL, modperl_sys_term, apr_pool_cleanup_null); modperl_init_globals(s, pconf); modperl_init(s, pconf); 1.50 +0 -4 modperl-2.0/src/modules/perl/modperl_interp.c Index: modperl_interp.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_interp.c,v retrieving revision 1.49 retrieving revision 1.50 diff -u -r1.49 -r1.50 --- modperl_interp.c 21 Jun 2002 03:46:46 - 1.49 +++ modperl_interp.c 21 Jun 2002 04:16:51 - 1.50 -152,10 +152,6 modperl_interp_destroy(mip-parent); } -modperl_env_unload(); - -modperl_perl_pp_unset_all(); - return APR_SUCCESS; }
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 2002/06/15 13:59:06 Modified:src/modules/perl mod_perl.c Log: fix modperl_boot prototype Revision ChangesPath 1.125 +1 -2 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.124 retrieving revision 1.125 diff -u -r1.124 -r1.125 --- mod_perl.c12 Jun 2002 21:13:10 - 1.124 +++ mod_perl.c15 Jun 2002 20:59:06 - 1.125 -95,11 +95,10 #endif /* MP_REFGEN_FIXUP */ -static void modperl_boot(void *data) +static void modperl_boot(pTHX_ void *data) { MP_dBOOT_DATA; MP_dSCFG(s); -dTHX; /* XXX: not too worried since this only happens at startup */ int i; #ifdef MP_REFGEN_FIXUP
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 2002/06/12 14:13:11 Modified:src/modules/perl mod_perl.c Log: unbuffer STDERR Revision ChangesPath 1.124 +2 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.123 retrieving revision 1.124 diff -u -r1.123 -r1.124 --- mod_perl.c6 Jun 2002 16:45:41 - 1.123 +++ mod_perl.c12 Jun 2002 21:13:10 - 1.124 -129,6 +129,8 */ modperl_require_module(aTHX_ DynaLoader, FALSE); #endif + +IoFLUSH_on(PL_stderrgv); /* unbuffer STDERR */ } static void modperl_xs_init(pTHX)
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 2002/06/06 09:45:41 Modified:src/modules/perl mod_perl.c Log: need to run open_logs,post_config,child_init hooks APR_HOOKS_FIRST so they are run before those in modperl_hooks.c Revision ChangesPath 1.123 +3 -3 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.122 retrieving revision 1.123 diff -u -r1.122 -r1.123 --- mod_perl.c4 Jun 2002 16:16:50 - 1.122 +++ mod_perl.c6 Jun 2002 16:45:41 - 1.123 -530,10 +530,10 NULL, NULL, APR_HOOK_MIDDLE); ap_hook_open_logs(modperl_hook_init, - NULL, NULL, APR_HOOK_MIDDLE); + NULL, NULL, APR_HOOK_FIRST); ap_hook_post_config(modperl_hook_post_config, -NULL, NULL, APR_HOOK_MIDDLE); +NULL, NULL, APR_HOOK_FIRST); ap_hook_handler(modperl_response_handler, NULL, NULL, APR_HOOK_MIDDLE); -576,7 +576,7 NULL, NULL, APR_HOOK_FIRST); ap_hook_child_init(modperl_hook_child_init, - NULL, NULL, APR_HOOK_MIDDLE); + NULL, NULL, APR_HOOK_FIRST); modperl_register_handler_hooks(); }
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 2002/06/04 09:16:51 Modified:src/modules/perl mod_perl.c Log: need to copy MODPERL2 for the ap_server_config_defines Revision ChangesPath 1.122 +2 -1 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.121 retrieving revision 1.122 diff -u -r1.121 -r1.122 --- mod_perl.c3 Jun 2002 23:41:18 - 1.121 +++ mod_perl.c4 Jun 2002 16:16:50 - 1.122 -426,7 +426,8 apr_pool_t *ptemp) { /* for IfDefine MODPERL2 and Apache-define(MODPERL2) */ -*(char **)apr_array_push(ap_server_config_defines) = MODPERL2; +*(char **)apr_array_push(ap_server_config_defines) = +apr_pstrdup(p, MODPERL2); /* XXX: htf can we have PerlPreConfigHandler * without first configuring mod_perl ?
cvs commit: modperl-2.0/src/modules/perl mod_perl.c mod_perl.h
dougm 2002/06/03 16:41:18 Modified:src/modules/perl mod_perl.c mod_perl.h Log: add MODPERL2 config define, as if the server had been started with -DMODPERL2 Revision ChangesPath 1.121 +10 -2 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.120 retrieving revision 1.121 diff -u -r1.120 -r1.121 --- mod_perl.c30 May 2002 23:35:02 - 1.120 +++ mod_perl.c3 Jun 2002 23:41:18 - 1.121 -422,12 +422,17 return OK; } -void modperl_pre_config_handler(apr_pool_t *p, apr_pool_t *plog, -apr_pool_t *ptemp) +int modperl_hook_pre_config(apr_pool_t *p, apr_pool_t *plog, +apr_pool_t *ptemp) { +/* for IfDefine MODPERL2 and Apache-define(MODPERL2) */ +*(char **)apr_array_push(ap_server_config_defines) = MODPERL2; + /* XXX: htf can we have PerlPreConfigHandler * without first configuring mod_perl ? */ + +return OK; } static int modperl_hook_pre_connection(conn_rec *c, void *csd) -520,6 +525,9 void modperl_register_hooks(apr_pool_t *p) { +ap_hook_pre_config(modperl_hook_pre_config, + NULL, NULL, APR_HOOK_MIDDLE); + ap_hook_open_logs(modperl_hook_init, NULL, NULL, APR_HOOK_MIDDLE); 1.44 +2 -2 modperl-2.0/src/modules/perl/mod_perl.h Index: mod_perl.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.h,v retrieving revision 1.43 retrieving revision 1.44 diff -u -r1.43 -r1.44 --- mod_perl.h31 May 2002 15:41:11 - 1.43 +++ mod_perl.h3 Jun 2002 23:41:18 - 1.44 -64,8 +64,8 void modperl_init(server_rec *s, apr_pool_t *p); int modperl_hook_init(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s); -void modperl_pre_config_handler(apr_pool_t *p, apr_pool_t *plog, -apr_pool_t *ptemp); +int modperl_hook_pre_config(apr_pool_t *p, apr_pool_t *plog, +apr_pool_t *ptemp); void modperl_register_hooks(apr_pool_t *p); apr_pool_t *modperl_server_pool(void); PerlInterpreter *modperl_startup(server_rec *s, apr_pool_t *p);
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 02/05/23 16:01:55 Modified:src/modules/perl mod_perl.c Log: pp_srefgen workaround should be applied to 5.6.x not just 5.6.1 Revision ChangesPath 1.119 +1 -1 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.118 retrieving revision 1.119 diff -u -r1.118 -r1.119 --- mod_perl.c23 May 2002 22:40:47 - 1.118 +++ mod_perl.c23 May 2002 23:01:55 - 1.119 -42,7 +42,7 apr_pool_t *p = MP_boot_data.p; \ server_rec *s = MP_boot_data.s -#if defined(USE_ITHREADS) defined(MP_PERL_5_6_1) +#if defined(USE_ITHREADS) defined(MP_PERL_5_6_x) # define MP_REFGEN_FIXUP #endif
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 02/04/05 17:23:17 Modified:src/modules/perl mod_perl.c Log: use AP_FTYPE_RESOURCE rather than AP_FTYPE_CONTENT_SET Revision ChangesPath 1.111 +2 -2 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.110 retrieving revision 1.111 diff -u -r1.110 -r1.111 --- mod_perl.c6 Apr 2002 01:19:15 - 1.110 +++ mod_perl.c6 Apr 2002 01:23:17 - 1.111 -504,11 +504,11 ap_register_output_filter(MP_FILTER_REQUEST_OUTPUT_NAME, modperl_output_filter_handler, - AP_FTYPE_CONTENT_SET); + AP_FTYPE_RESOURCE); ap_register_input_filter(MP_FILTER_REQUEST_INPUT_NAME, modperl_input_filter_handler, - AP_FTYPE_CONTENT_SET); + AP_FTYPE_RESOURCE); ap_register_output_filter(MP_FILTER_CONNECTION_OUTPUT_NAME, modperl_output_filter_handler,
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_filter.c
dougm 02/03/09 16:09:52 Modified:src/modules/perl mod_perl.c modperl_filter.c Log: Submitted by: Philippe M. Chiasson [EMAIL PROTECTED] Reviewed by: dougm sync with filter name changes Revision ChangesPath 1.109 +2 -2 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.108 retrieving revision 1.109 diff -u -r1.108 -r1.109 --- mod_perl.c26 Feb 2002 19:01:38 - 1.108 +++ mod_perl.c10 Mar 2002 00:09:52 - 1.109 @@ -504,11 +504,11 @@ ap_register_output_filter(MODPERL_OUTPUT_FILTER_NAME, modperl_output_filter_handler, - AP_FTYPE_CONTENT); + AP_FTYPE_CONTENT_SET); ap_register_input_filter(MODPERL_INPUT_FILTER_NAME, modperl_input_filter_handler, - AP_FTYPE_CONTENT); + AP_FTYPE_CONTENT_SET); ap_hook_pre_connection(modperl_hook_pre_connection, NULL, NULL, APR_HOOK_FIRST); 1.32 +1 -1 modperl-2.0/src/modules/perl/modperl_filter.c Index: modperl_filter.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_filter.c,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- modperl_filter.c 25 Jan 2002 04:04:22 - 1.31 +++ modperl_filter.c 10 Mar 2002 00:09:52 - 1.32 @@ -506,7 +506,7 @@ ctx = (modperl_filter_ctx_t *)apr_pcalloc(r-pool, sizeof(*ctx)); ctx-handler = handlers[i]; -addfunc(name, (void*)ctx, r, NULL); +addfunc(name, (void*)ctx, r, r-connection); } return OK;
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
stas02/01/17 22:50:10 Modified:src/modules/perl mod_perl.c Log: - modperl_startup() already handles PerlModule/Require directives, so handle these separately inly if modperl_startup() wasn't called. which is the case for vhosts which inherit the perl interpretor from the base. Revision ChangesPath 1.105 +8 -7 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.104 retrieving revision 1.105 diff -u -r1.104 -r1.105 --- mod_perl.c9 Jan 2002 00:31:39 - 1.104 +++ mod_perl.c18 Jan 2002 06:50:10 - 1.105 @@ -264,14 +264,15 @@ created parent interpreter for VirtualHost %s\n, modperl_server_desc(s, p)); } - -if (!modperl_config_apply_PerlModule(s, scfg, perl, p)) { -exit(1); -} -if (!modperl_config_apply_PerlRequire(s, scfg, perl, p)) { -exit(1); +else { +if (!modperl_config_apply_PerlModule(s, scfg, perl, p)) { +exit(1); +} +if (!modperl_config_apply_PerlRequire(s, scfg, perl, p)) { +exit(1); +} } - + #ifdef USE_ITHREADS if (!MpSrvENABLE(scfg)) {
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 02/01/08 16:31:39 Modified:src/modules/perl mod_perl.c Log: rid warning #ifdef USE_ITHREADS Revision ChangesPath 1.104 +1 -1 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.103 retrieving revision 1.104 diff -u -r1.103 -r1.104 --- mod_perl.c8 Jan 2002 01:13:28 - 1.103 +++ mod_perl.c9 Jan 2002 00:31:39 - 1.104 @@ -640,10 +640,10 @@ int modperl_response_handler_cgi(request_rec *r) { MP_dDCFG; -MP_dRCFG; GV *h_stdin, *h_stdout; int retval; #ifdef USE_ITHREADS +MP_dRCFG; pTHX; modperl_interp_t *interp; #endif
cvs commit: modperl-2.0/src/modules/perl mod_perl.c mod_perl.h modperl_interp.c
dougm 02/01/07 17:13:29 Modified:src/modules/perl mod_perl.c mod_perl.h modperl_interp.c Log: fix so perl_destruct (and things like END blocks) are run in child processes when they are shutdown Revision ChangesPath 1.103 +30 -3 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.102 retrieving revision 1.103 diff -u -r1.102 -r1.103 --- mod_perl.c6 Jan 2002 21:39:36 - 1.102 +++ mod_perl.c8 Jan 2002 01:13:28 - 1.103 @@ -128,6 +128,20 @@ SAVEDESTRUCTOR_X(modperl_boot, 0); } +/* + * the server_pool is a subpool of the parent pool (aka pconf) + * this is where we register the cleanups that teardown the interpreter. + * 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 + */ +static apr_pool_t *server_pool = NULL; + +apr_pool_t *modperl_server_pool(void) +{ +return server_pool; +} + PerlInterpreter *modperl_startup(server_rec *s, apr_pool_t *p) { AV *endav; @@ -198,8 +212,8 @@ } #ifndef USE_ITHREADS -cdata = modperl_cleanup_data_new(p, (void*)perl); -apr_pool_cleanup_register(p, cdata, +cdata = modperl_cleanup_data_new(server_pool, (void*)perl); +apr_pool_cleanup_register(server_pool, cdata, modperl_shutdown, apr_pool_cleanup_null); #endif @@ -380,8 +394,10 @@ int modperl_hook_init(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) { +apr_pool_create(server_pool, pconf); + modperl_sys_init(); -apr_pool_cleanup_register(pconf, NULL, +apr_pool_cleanup_register(server_pool, NULL, modperl_sys_term, apr_pool_cleanup_null); modperl_init_globals(s, pconf); modperl_init(s, pconf); @@ -461,9 +477,20 @@ return OK; } +static apr_status_t modperl_child_exit(void *data) +{ +apr_pool_clear(server_pool); +server_pool = NULL; + +return APR_SUCCESS; +} + static void modperl_hook_child_init(apr_pool_t *p, server_rec *s) { modperl_perl_init_ids_server(s); + +apr_pool_cleanup_register(p, NULL, modperl_child_exit, + apr_pool_cleanup_null); } void modperl_register_hooks(apr_pool_t *p) 1.40 +1 -0 modperl-2.0/src/modules/perl/mod_perl.h Index: mod_perl.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.h,v retrieving revision 1.39 retrieving revision 1.40 diff -u -r1.39 -r1.40 --- mod_perl.h24 Nov 2001 01:15:01 - 1.39 +++ mod_perl.h8 Jan 2002 01:13:28 - 1.40 @@ -45,6 +45,7 @@ void modperl_pre_config_handler(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp); void modperl_register_hooks(apr_pool_t *p); +apr_pool_t *modperl_server_pool(void); PerlInterpreter *modperl_startup(server_rec *s, apr_pool_t *p); void xs_init(pTHXo); 1.39 +2 -1 modperl-2.0/src/modules/perl/modperl_interp.c Index: modperl_interp.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_interp.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- modperl_interp.c 5 Nov 2001 05:19:01 - 1.38 +++ modperl_interp.c 8 Jan 2002 01:13:28 - 1.39 @@ -191,6 +191,7 @@ void modperl_interp_init(server_rec *s, apr_pool_t *p, PerlInterpreter *perl) { +apr_pool_t *server_pool = modperl_server_pool(); pTHX; MP_dSCFG(s); @@ -210,7 +211,7 @@ /* this happens post-config in mod_perl.c:modperl_init_clones() */ /* modperl_tipool_init(tipool); */ -apr_pool_cleanup_register(p, (void*)mip, +apr_pool_cleanup_register(server_pool, (void*)mip, modperl_interp_pool_destroy, apr_pool_cleanup_null);
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_perl_includes.h
dougm 01/12/22 21:46:29 Modified:src/modules/perl mod_perl.c modperl_perl_includes.h Log: nasty workaround for bug fixed in bleedperl (11536 + 11553) in $foo = \*STDOUT; where the reference would get a copy of STDOUT without the tie magic. (recentish changes that re-tied STDOUT every request uncovered an instance of the bug during 'make test') Revision ChangesPath 1.100 +55 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.99 retrieving revision 1.100 diff -u -r1.99 -r1.100 --- mod_perl.c2001/12/11 23:20:34 1.99 +++ mod_perl.c2001/12/23 05:46:29 1.100 @@ -42,12 +42,67 @@ apr_pool_t *p = MP_boot_data.p; \ server_rec *s = MP_boot_data.s +#if defined(USE_ITHREADS) defined(MP_PERL_5_6_1) +# define MP_REFGEN_FIXUP +#endif + +#ifdef MP_REFGEN_FIXUP + +/* + * nasty workaround for bug fixed in bleedperl (11536 + 11553) + * XXX: when 5.8.0 is released + stable, we will require 5.8.0 + * if ithreads are enabled. + */ +static OP * (*MP_pp_srefgen_ptr)(pTHX) = NULL; + +static OP *modperl_pp_srefgen(pTHX) +{ +dSP; +OP *o; +SV *sv = *SP; + +if (SvPADTMP(sv) IS_PADGV(sv)) { +/* prevent S_refto from making a copy of the GV, + * tricking it to SvREFCNT_inc and point to this one instead. + */ +SvPADTMP_off(sv); +} +else { +sv = Nullsv; +} + +/* o = Perl_pp_srefgen(aTHX) */ +o = MP_pp_srefgen_ptr(aTHX); + +if (sv) { +/* restore original flags */ +SvPADTMP_on(sv); +} + +return o; +} + +static void modperl_refgen_ops_fixup(void) +{ +/* XXX: OP_REFGEN suffers a similar problem */ +if (!MP_pp_srefgen_ptr) { +MP_pp_srefgen_ptr = PL_ppaddr[OP_SREFGEN]; +PL_ppaddr[OP_SREFGEN] = MEMBER_TO_FPTR(modperl_pp_srefgen); +} +} + +#endif /* MP_REFGEN_FIXUP */ + static void modperl_boot(void *data) { MP_dBOOT_DATA; dTHX; /* XXX: not too worried since this only happens at startup */ int i; +#ifdef MP_REFGEN_FIXUP +modperl_refgen_ops_fixup(); +#endif + modperl_env_clear(aTHX); modperl_env_default_populate(aTHX); 1.9 +4 -0 modperl-2.0/src/modules/perl/modperl_perl_includes.h Index: modperl_perl_includes.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl_includes.h,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- modperl_perl_includes.h 2001/11/07 03:14:54 1.8 +++ modperl_perl_includes.h 2001/12/23 05:46:29 1.9 @@ -35,6 +35,10 @@ #include perl.h #include XSUB.h +#if (PERL_REVISION == 5) (PERL_VERSION == 6) (PERL_SUBVERSION == 1) +# define MP_PERL_5_6_1 +#endif + #ifdef PERL_CORE # ifndef croak # define croak Perl_croak_nocontext
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 01/12/11 15:20:34 Modified:src/modules/perl mod_perl.c Log: suspend END blocks to be run at server shutdown Revision ChangesPath 1.99 +7 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.98 retrieving revision 1.99 diff -u -r1.98 -r1.99 --- mod_perl.c2001/12/04 22:43:07 1.98 +++ mod_perl.c2001/12/11 23:20:34 1.99 @@ -75,6 +75,7 @@ PerlInterpreter *modperl_startup(server_rec *s, apr_pool_t *p) { +AV *endav; dTHXa(NULL); MP_dSCFG(s); PerlInterpreter *perl; @@ -116,7 +117,13 @@ exit(1); } +/* suspend END blocks to be run at server shutdown */ +endav = PL_endav; +PL_endav = Nullav; + perl_run(perl); + +PL_endav = endav; MP_TRACE_i(MP_FUNC, constructed interpreter=0x%lx\n, (unsigned long)perl);
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 01/12/04 14:43:07 Modified:src/modules/perl mod_perl.c Log: flush main output buffer before running a subrequest Revision ChangesPath 1.98 +6 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.97 retrieving revision 1.98 diff -u -r1.97 -r1.98 --- mod_perl.c2001/11/24 01:15:01 1.97 +++ mod_perl.c2001/12/04 22:43:07 1.98 @@ -368,6 +368,12 @@ modperl_config_req_init(r, rcfg); +if (r-main) { +modperl_config_req_t *main_rcfg = +modperl_config_req_get(r-main); +modperl_wbucket_flush(main_rcfg-wbucket); +} + return OK; }
cvs commit: modperl-2.0/src/modules/perl mod_perl.c mod_perl.h modperl_callback.c modperl_callback.h
dougm 01/11/23 17:15:02 Modified:lib/ModPerl Code.pm src/modules/perl mod_perl.c mod_perl.h modperl_callback.c modperl_callback.h Log: adjust to open_logs and post_config hook prototype changes Revision ChangesPath 1.72 +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.71 retrieving revision 1.72 diff -u -r1.71 -r1.72 --- Code.pm 2001/11/05 05:19:01 1.71 +++ Code.pm 2001/11/24 01:15:01 1.72 @@ -33,7 +33,7 @@ {type = 'server_rec', name = 's'}], }, Files = { -ret = 'void', +ret = 'int', args = [{type = 'apr_pool_t', name = 'pconf'}, {type = 'apr_pool_t', name = 'plog'}, {type = 'apr_pool_t', name = 'ptemp'}, 1.97 +8 -4 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.96 retrieving revision 1.97 diff -u -r1.96 -r1.97 --- mod_perl.c2001/11/19 00:07:28 1.96 +++ mod_perl.c2001/11/24 01:15:01 1.97 @@ -315,14 +315,16 @@ return APR_SUCCESS; } -void modperl_hook_init(apr_pool_t *pconf, apr_pool_t *plog, - apr_pool_t *ptemp, server_rec *s) +int modperl_hook_init(apr_pool_t *pconf, apr_pool_t *plog, + apr_pool_t *ptemp, server_rec *s) { modperl_sys_init(); apr_pool_cleanup_register(pconf, NULL, modperl_sys_term, apr_pool_cleanup_null); modperl_init_globals(s, pconf); modperl_init(s, pconf); + +return OK; } void modperl_pre_config_handler(apr_pool_t *p, apr_pool_t *plog, @@ -340,8 +342,8 @@ return OK; } -static void modperl_hook_post_config(apr_pool_t *pconf, apr_pool_t *plog, - apr_pool_t *ptemp, server_rec *s) +static int modperl_hook_post_config(apr_pool_t *pconf, apr_pool_t *plog, +apr_pool_t *ptemp, server_rec *s) { #ifdef USE_ITHREADS MP_dSCFG(s); @@ -356,6 +358,8 @@ #ifdef USE_ITHREADS modperl_init_clones(s, pconf); #endif + +return OK; } static int modperl_hook_create_request(request_rec *r) 1.39 +2 -2 modperl-2.0/src/modules/perl/mod_perl.h Index: mod_perl.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.h,v retrieving revision 1.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- mod_perl.h2001/09/27 19:04:38 1.38 +++ mod_perl.h2001/11/24 01:15:01 1.39 @@ -40,8 +40,8 @@ #include modperl_perl.h void modperl_init(server_rec *s, apr_pool_t *p); -void modperl_hook_init(apr_pool_t *pconf, apr_pool_t *plog, - apr_pool_t *ptemp, server_rec *s); +int modperl_hook_init(apr_pool_t *pconf, apr_pool_t *plog, + apr_pool_t *ptemp, server_rec *s); void modperl_pre_config_handler(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp); void modperl_register_hooks(apr_pool_t *p); 1.47 +6 -6 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.46 retrieving revision 1.47 diff -u -r1.46 -r1.47 --- modperl_callback.c2001/11/05 05:19:01 1.46 +++ modperl_callback.c2001/11/24 01:15:01 1.47 @@ -224,11 +224,11 @@ p, NULL, NULL); } -void modperl_callback_files(int idx, -apr_pool_t *pconf, apr_pool_t *plog, -apr_pool_t *ptemp, server_rec *s) +int modperl_callback_files(int idx, + apr_pool_t *pconf, apr_pool_t *plog, + apr_pool_t *ptemp, server_rec *s) { -modperl_callback_run_handlers(idx, MP_HANDLER_TYPE_FILES, - NULL, NULL, s, - pconf, plog, ptemp); +return modperl_callback_run_handlers(idx, MP_HANDLER_TYPE_FILES, + NULL, NULL, s, + pconf, plog, ptemp); } 1.20 +3 -3 modperl-2.0/src/modules/perl/modperl_callback.h Index: modperl_callback.h === RCS file:
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 01/11/14 17:30:46 Modified:src/modules/perl mod_perl.c Log: save globals before populating %ENV vars Revision ChangesPath 1.94 +2 -2 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.93 retrieving revision 1.94 diff -u -r1.93 -r1.94 --- mod_perl.c2001/11/01 23:50:32 1.93 +++ mod_perl.c2001/11/15 01:30:45 1.94 @@ -524,6 +524,8 @@ } #endif +modperl_perl_global_request_save(aTHX_ r); + /* default is +SetupEnv, skip if PerlOption -SetupEnv */ if (MpDirSETUP_ENV(dcfg) || !MpDirSeenSETUP_ENV(dcfg)) { modperl_env_request_populate(aTHX_ r); @@ -532,8 +534,6 @@ if (MpDirPARSE_HEADERS(dcfg)) { rcfg-wbucket.header_parse = 1; } - -modperl_perl_global_request_save(aTHX_ r); h_stdout = modperl_io_tie_stdout(aTHX_ r); h_stdin = modperl_io_tie_stdin(aTHX_ r);
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_interp.c modperl_perl.c modperl_perl.h
dougm 01/11/01 15:50:32 Modified:src/modules/perl mod_perl.c modperl_interp.c modperl_perl.c modperl_perl.h Log: moving perl_destruct() and releated items into modperl_perl_destruct() wrapper Revision ChangesPath 1.93 +1 -3 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.92 retrieving revision 1.93 diff -u -r1.92 -r1.93 --- mod_perl.c2001/10/13 19:11:32 1.92 +++ mod_perl.c2001/11/01 23:50:32 1.93 @@ -9,12 +9,10 @@ handles = modperl_xs_dl_handles_get(aTHX_ cdata-pool); -PL_perl_destruct_level = 2; MP_TRACE_i(MP_FUNC, destroying interpreter=0x%lx\n, (unsigned long)perl); -perl_destruct(perl); -perl_free(perl); +modperl_perl_destruct(perl); if (handles) { modperl_xs_dl_handles_close(cdata-pool, handles); 1.37 +1 -12 modperl-2.0/src/modules/perl/modperl_interp.c Index: modperl_interp.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_interp.c,v retrieving revision 1.36 retrieving revision 1.37 diff -u -r1.36 -r1.37 --- modperl_interp.c 2001/10/21 22:10:11 1.36 +++ modperl_interp.c 2001/11/01 23:50:32 1.37 @@ -83,9 +83,6 @@ MP_TRACE_i(MP_FUNC, *error - still in use!*\n); } -PERL_SET_CONTEXT(interp-perl); -PL_perl_destruct_level = 2; - /* we cant use interp-mip-ap_pool without locking * apr_pool_create() will mutex lock for us * XXX: could roll something without using apr_pool_t @@ -93,16 +90,8 @@ */ (void)apr_pool_create(p, NULL); handles = modperl_xs_dl_handles_get(aTHX_ p); - -perl_destruct(interp-perl); -/* XXX: big bug in 5.6.1 fixed in 5.7.2+ - * XXX: see CLONEf_CLONE_HOST perl_clone() flag - * XXX: try to find a workaround for 5.6.1 - */ -#ifndef WIN32 -perl_free(interp-perl); -#endif +modperl_perl_destruct(interp-perl); if (handles) { modperl_xs_dl_handles_close(p, handles); 1.7 +19 -0 modperl-2.0/src/modules/perl/modperl_perl.c Index: modperl_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- modperl_perl.c2001/10/21 05:46:47 1.6 +++ modperl_perl.c2001/11/01 23:50:32 1.7 @@ -82,3 +82,22 @@ modperl_perl_init_ids(aTHX_ ids); #endif } + +void modperl_perl_destruct(PerlInterpreter *perl) +{ +dTHXa(perl); + +PERL_SET_CONTEXT(perl); + +PL_perl_destruct_level = 2; + +perl_destruct(perl); + +/* XXX: big bug in 5.6.1 fixed in 5.7.2+ + * XXX: see CLONEf_CLONE_HOST perl_clone() flag + * XXX: try to find a workaround for 5.6.1 + */ +#ifndef WIN32 +perl_free(perl); +#endif +} 1.7 +2 -0 modperl-2.0/src/modules/perl/modperl_perl.h Index: modperl_perl.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- modperl_perl.h2001/10/21 05:46:47 1.6 +++ modperl_perl.h2001/11/01 23:50:32 1.7 @@ -11,4 +11,6 @@ void modperl_perl_init_ids_server(server_rec *s); +void modperl_perl_destruct(PerlInterpreter *perl); + #endif /* MODPERL_PERL_H */
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_perl_global.c modperl_perl_global.h
dougm 01/10/13 12:02:03 Modified:src/modules/perl mod_perl.c modperl_perl_global.c modperl_perl_global.h Log: calculate hash of MP_modglobal_keys keys at startup Revision ChangesPath 1.91 +1 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.90 retrieving revision 1.91 diff -u -r1.90 -r1.91 --- mod_perl.c2001/10/11 04:47:30 1.90 +++ mod_perl.c2001/10/13 19:02:03 1.91 @@ -332,6 +332,7 @@ ap_add_version_component(pconf, Perl_form(aTHX_ Perl/v%vd, PL_patchlevel)); modperl_mgv_hash_handlers(pconf, s); +modperl_modglobal_hash_keys(); #ifdef USE_ITHREADS modperl_init_clones(s, pconf); #endif 1.11 +10 -0 modperl-2.0/src/modules/perl/modperl_perl_global.c Index: modperl_perl_global.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl_global.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- modperl_perl_global.c 2001/10/13 18:55:03 1.10 +++ modperl_perl_global.c 2001/10/13 19:02:03 1.11 @@ -26,6 +26,16 @@ { NULL }, }; +void modperl_modglobal_hash_keys(void) +{ +modperl_modglobal_key_t *gkey = MP_modglobal_keys; + +while (gkey-name) { +PERL_HASH(gkey-hash, gkey-val, gkey-len); +gkey++; +} +} + modperl_modglobal_key_t *modperl_modglobal_lookup(pTHX_ const char *name) { int i; 1.9 +2 -0 modperl-2.0/src/modules/perl/modperl_perl_global.h Index: modperl_perl_global.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl_global.h,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- modperl_perl_global.h 2001/10/13 18:55:03 1.8 +++ modperl_perl_global.h 2001/10/13 19:02:03 1.9 @@ -49,6 +49,8 @@ modperl_perl_global_svpv_t rs; } modperl_perl_globals_t; +void modperl_modglobal_hash_keys(void); + modperl_modglobal_key_t *modperl_modglobal_lookup(pTHX_ const char *name); void modperl_perl_global_request_save(pTHX_ request_rec *r);
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_perl.c modperl_perl.h
dougm 01/10/08 17:13:00 Modified:src/modules/perl mod_perl.c modperl_perl.c modperl_perl.h Log: *CORE::GLOBAL::exit = \ModPerl::Util::exit Revision ChangesPath 1.88 +2 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.87 retrieving revision 1.88 diff -u -r1.87 -r1.88 --- mod_perl.c2001/10/07 19:04:20 1.87 +++ mod_perl.c2001/10/09 00:13:00 1.88 @@ -39,6 +39,8 @@ modperl_env_default_populate(aTHX); +modperl_perl_core_global_init(aTHX); + for (i=0; MP_xs_loaders[i]; i++) { char *name = Perl_form(aTHX_ MP_xs_loader_name, MP_xs_loaders[i]); newCONSTSUB(PL_defstash, name, newSViv(1)); 1.5 +26 -0 modperl-2.0/src/modules/perl/modperl_perl.c Index: modperl_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- modperl_perl.c2001/09/16 17:28:43 1.4 +++ modperl_perl.c2001/10/09 00:13:00 1.5 @@ -4,6 +4,32 @@ * others (larger tweaks) are in their own modules, e.g. modperl_env.c */ +typedef struct { +const char *name; +const char *sub_name; +const char *core_name; +} modperl_perl_core_global_t; + +#define MP_PERL_CORE_GLOBAL_ENT(name) \ +{ name, ModPerl::Util:: name, CORE::GLOBAL:: name } + +static modperl_perl_core_global_t MP_perl_core_global_entries[] = { +MP_PERL_CORE_GLOBAL_ENT(exit), +{ NULL }, +}; + +void modperl_perl_core_global_init(pTHX) +{ +modperl_perl_core_global_t *cglobals = MP_perl_core_global_entries; + +while (cglobals-name) { +GV *gv = gv_fetchpv(cglobals-core_name, TRUE, SVt_PVCV); +GvCV(gv) = get_cv(cglobals-sub_name, TRUE); +GvIMPORTED_CV_on(gv); +cglobals++; +} +} + void modperl_perl_ids_get(modperl_perl_ids_t *ids) { ids-pid = (I32)getpid(); 1.5 +2 -0 modperl-2.0/src/modules/perl/modperl_perl.h Index: modperl_perl.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- modperl_perl.h2001/09/16 17:28:43 1.4 +++ modperl_perl.h2001/10/09 00:13:00 1.5 @@ -7,6 +7,8 @@ Gid_t gid, egid; } modperl_perl_ids_t; +void modperl_perl_core_global_init(pTHX); + void modperl_perl_ids_get(modperl_perl_ids_t *ids); void modperl_perl_init_ids(pTHX_ modperl_perl_ids_t *ids);
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_perl_global.c modperl_perl_global.h
dougm 01/10/07 12:04:20 Modified:src/modules/perl mod_perl.c modperl_perl_global.c modperl_perl_global.h Log: add modperl_perl_global_request_{restore,save} functions for future use of request_rec to manage globals Revision ChangesPath 1.87 +2 -2 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.86 retrieving revision 1.87 diff -u -r1.86 -r1.87 --- mod_perl.c2001/10/06 19:43:40 1.86 +++ mod_perl.c2001/10/07 19:04:20 1.87 @@ -529,7 +529,7 @@ rcfg-wbucket.header_parse = 1; } -modperl_perl_global_save(aTHX_ rcfg-perl_globals); +modperl_perl_global_request_save(aTHX_ r); h_stdout = modperl_io_tie_stdout(aTHX_ r); h_stdin = modperl_io_tie_stdin(aTHX_ r); @@ -550,7 +550,7 @@ modperl_env_request_untie(aTHX_ r); #endif -modperl_perl_global_restore(aTHX_ rcfg-perl_globals); +modperl_perl_global_request_restore(aTHX_ r); #ifdef USE_ITHREADS if (MpInterpPUTBACK(interp)) { 1.5 +14 -2 modperl-2.0/src/modules/perl/modperl_perl_global.c Index: modperl_perl_global.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl_global.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- modperl_perl_global.c 2001/10/06 23:27:47 1.4 +++ modperl_perl_global.c 2001/10/07 19:04:20 1.5 @@ -128,7 +128,7 @@ apr_uint64_t **ptr = (apr_uint64_t **) \ ((char *)globals + (int)(long)modperl_perl_global_entries[i].offset) -void modperl_perl_global_save(pTHX_ modperl_perl_globals_t *globals) +static void modperl_perl_global_save(pTHX_ modperl_perl_globals_t *globals) { int i; @@ -154,7 +154,7 @@ } } -void modperl_perl_global_restore(pTHX_ modperl_perl_globals_t *globals) +static void modperl_perl_global_restore(pTHX_ modperl_perl_globals_t *globals) { int i; @@ -176,4 +176,16 @@ break; } } +} + +void modperl_perl_global_request_save(pTHX_ request_rec *r) +{ +MP_dRCFG; +modperl_perl_global_save(aTHX_ rcfg-perl_globals); +} + +void modperl_perl_global_request_restore(pTHX_ request_rec *r) +{ +MP_dRCFG; +modperl_perl_global_restore(aTHX_ rcfg-perl_globals); } 1.4 +2 -2 modperl-2.0/src/modules/perl/modperl_perl_global.h Index: modperl_perl_global.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl_global.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- modperl_perl_global.h 2001/09/28 19:53:22 1.3 +++ modperl_perl_global.h 2001/10/07 19:04:20 1.4 @@ -31,8 +31,8 @@ modperl_perl_global_svpv_t rs; } modperl_perl_globals_t; -void modperl_perl_global_save(pTHX_ modperl_perl_globals_t *globals); +void modperl_perl_global_request_save(pTHX_ request_rec *r); -void modperl_perl_global_restore(pTHX_ modperl_perl_globals_t *globals); +void modperl_perl_global_request_restore(pTHX_ request_rec *r); #endif
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_cmd.c modperl_cmd.h
dougm 01/10/06 12:43:40 Modified:src/modules/perl mod_perl.c modperl_cmd.c modperl_cmd.h Log: implement PerlInitHandler Revision ChangesPath 1.86 +1 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.85 retrieving revision 1.86 diff -u -r1.85 -r1.86 --- mod_perl.c2001/09/28 19:51:40 1.85 +++ mod_perl.c2001/10/06 19:43:40 1.86 @@ -415,6 +415,7 @@ MP_CMD_SRV_ITERATE(PerlModule, modules, PerlModule), MP_CMD_SRV_ITERATE(PerlRequire, requires, PerlRequire), MP_CMD_DIR_ITERATE(PerlOptions, options, Perl Options), +MP_CMD_DIR_ITERATE(PerlInitHandler, init_handlers, Subroutine name), MP_CMD_DIR_TAKE2(PerlSetVar, set_var, PerlSetVar), MP_CMD_DIR_ITERATE2(PerlAddVar, add_var, PerlAddVar), #ifdef MP_TRACE 1.13 +8 -0 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.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- modperl_cmd.c 2001/09/28 19:51:40 1.12 +++ modperl_cmd.c 2001/10/06 19:43:40 1.13 @@ -116,6 +116,14 @@ return NULL; } +MP_CMD_SRV_DECLARE(init_handlers) +{ +if (parms-path) { +return modperl_cmd_header_parser_handlers(parms, mconfig, arg); +} + +return modperl_cmd_post_read_request_handlers(parms, mconfig, arg); +} #ifdef MP_COMPAT_1X 1.15 +1 -0 modperl-2.0/src/modules/perl/modperl_cmd.h Index: modperl_cmd.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_cmd.h,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- modperl_cmd.h 2001/09/28 19:51:40 1.14 +++ modperl_cmd.h 2001/10/06 19:43:40 1.15 @@ -23,6 +23,7 @@ MP_CMD_SRV_DECLARE2(set_var); MP_CMD_SRV_DECLARE2(add_var); MP_CMD_SRV_DECLARE(options); +MP_CMD_SRV_DECLARE(init_handlers); #ifdef MP_COMPAT_1X
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 01/09/28 12:01:50 Modified:src/modules/perl mod_perl.c Log: PL_destruct_level should always be 2 Revision ChangesPath 1.83 +6 -6 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.82 retrieving revision 1.83 diff -u -r1.82 -r1.83 --- mod_perl.c2001/09/28 18:34:30 1.82 +++ mod_perl.c2001/09/28 19:01:50 1.83 @@ -58,6 +58,7 @@ PerlInterpreter *modperl_startup(server_rec *s, apr_pool_t *p) { +dTHXa(NULL); MP_dSCFG(s); PerlInterpreter *perl; int status; @@ -81,13 +82,12 @@ exit(1); } +aTHX = perl; + perl_construct(perl); -#ifdef MP_DEBUG -{ -dTHXa(perl); -PL_perl_destruct_level = 2; -} -#endif + +PL_perl_destruct_level = 2; + status = perl_parse(perl, modperl_xs_init, argc, argv, NULL); if (status) {
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_cmd.c modperl_cmd.h modperl_config.c modperl_types.h
stas01/09/28 12:51:40 Modified:src/modules/perl mod_perl.c modperl_cmd.c modperl_cmd.h modperl_config.c modperl_types.h Log: - implementation of PerlSetVar and PerlAddVar Revision ChangesPath 1.85 +3 -1 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.84 retrieving revision 1.85 diff -u -r1.84 -r1.85 --- mod_perl.c2001/09/28 19:33:58 1.84 +++ mod_perl.c2001/09/28 19:51:40 1.85 @@ -173,7 +173,7 @@ if (!modperl_config_apply_PerlRequire(s, scfg, perl, p)) { exit(1); } - + #ifdef USE_ITHREADS if (!MpSrvENABLE(scfg)) { @@ -415,6 +415,8 @@ MP_CMD_SRV_ITERATE(PerlModule, modules, PerlModule), MP_CMD_SRV_ITERATE(PerlRequire, requires, PerlRequire), MP_CMD_DIR_ITERATE(PerlOptions, options, Perl Options), +MP_CMD_DIR_TAKE2(PerlSetVar, set_var, PerlSetVar), +MP_CMD_DIR_ITERATE2(PerlAddVar, add_var, PerlAddVar), #ifdef MP_TRACE MP_CMD_SRV_TAKE1(PerlTrace, trace, Trace level), #endif 1.12 +32 -0 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.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- modperl_cmd.c 2001/09/27 19:41:44 1.11 +++ modperl_cmd.c 2001/09/28 19:51:40 1.12 @@ -60,6 +60,38 @@ return NULL; } +MP_CMD_SRV_DECLARE2(set_var) +{ +MP_dSCFG(parms-server); +modperl_config_dir_t *dcfg = (modperl_config_dir_t *)mconfig; + +if (parms-path) { +apr_table_set(dcfg-SetVar, arg1, arg2); +MP_TRACE_d(MP_FUNC, DIR: arg1 = %s, arg2 = %s\n, arg1, arg2); +} +else { +apr_table_set(scfg-SetVar, arg1, arg2); +MP_TRACE_d(MP_FUNC, SRV: arg1 = %s, arg2 = %s\n, arg1, arg2); +} +return NULL; +} + +MP_CMD_SRV_DECLARE2(add_var) +{ +MP_dSCFG(parms-server); +modperl_config_dir_t *dcfg = (modperl_config_dir_t *)mconfig; + +if (parms-path) { +apr_table_add(dcfg-SetVar, arg1, arg2); +MP_TRACE_d(MP_FUNC, DIR: arg1 = %s, arg2 = %s\n, arg1, arg2); +} +else { +apr_table_add(scfg-SetVar, arg1, arg2); +MP_TRACE_d(MP_FUNC, SRV: arg1 = %s, arg2 = %s\n, arg1, arg2); +} +return NULL; +} + MP_CMD_SRV_DECLARE(options) { MP_dSCFG(parms-server); 1.14 +14 -5 modperl-2.0/src/modules/perl/modperl_cmd.h Index: modperl_cmd.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_cmd.h,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- modperl_cmd.h 2001/09/27 19:41:44 1.13 +++ modperl_cmd.h 2001/09/28 19:51:40 1.14 @@ -4,14 +4,13 @@ char *modperl_cmd_push_handlers(MpAV **handlers, const char *name, apr_pool_t *p); - #define MP_CMD_SRV_DECLARE(item) \ -const char *modperl_cmd_##item(cmd_parms *parms, \ - void *mconfig, const char *arg) +const char *modperl_cmd_##item(cmd_parms *parms, void *mconfig, \ + const char *arg) #define MP_CMD_SRV_DECLARE2(item) \ -const char *modperl_cmd_##item(cmd_parms *parms, \ - void *mconfig, const char *arg1, const char *arg2) +const char *modperl_cmd_##item(cmd_parms *parms, void *mconfig, \ + const char *arg1, const char *arg2) #define MP_CMD_SRV_DECLARE_FLAG(item) \ const char *modperl_cmd_##item(cmd_parms *parms, \ @@ -21,6 +20,8 @@ MP_CMD_SRV_DECLARE(switches); MP_CMD_SRV_DECLARE(modules); MP_CMD_SRV_DECLARE(requires); +MP_CMD_SRV_DECLARE2(set_var); +MP_CMD_SRV_DECLARE2(add_var); MP_CMD_SRV_DECLARE(options); #ifdef MP_COMPAT_1X @@ -73,6 +74,10 @@ AP_INIT_ITERATE( name, modperl_cmd_##item, NULL, \ RSRC_CONF, desc ) +#define MP_CMD_SRV_ITERATE2(name, item, desc) \ + AP_INIT_ITERATE2( name, modperl_cmd_##item, NULL, \ + RSRC_CONF, desc ) + #define MP_CMD_DIR_TAKE1(name, item, desc) \ AP_INIT_TAKE1( name, modperl_cmd_##item, NULL, \ OR_ALL, desc ) @@ -83,6 +88,10 @@ #define MP_CMD_DIR_ITERATE(name, item, desc) \ AP_INIT_ITERATE( name, modperl_cmd_##item, NULL, \ + OR_ALL, desc ) + +#define MP_CMD_DIR_ITERATE2(name, item, desc) \ +AP_INIT_ITERATE2( name, modperl_cmd_##item, NULL, \ OR_ALL, desc ) #define MP_CMD_DIR_FLAG(name, item, desc) \
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_cmd.c modperl_cmd.h
dougm 01/09/27 08:46:21 Modified:src/modules/perl mod_perl.c modperl_cmd.c modperl_cmd.h Log: add PerlTaintCheck directive for backwards compat Revision ChangesPath 1.73 +2 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.72 retrieving revision 1.73 diff -u -r1.72 -r1.73 --- mod_perl.c2001/09/27 15:26:36 1.72 +++ mod_perl.c2001/09/27 15:46:21 1.73 @@ -428,6 +428,8 @@ #ifdef MP_COMPAT_1X MP_CMD_DIR_ITERATE(PerlHandler, response_handlers, Subroutine name), +MP_CMD_SRV_FLAG(PerlTaintCheck, taint_check, +Turn on -T switch), #endif MP_CMD_ENTRIES, { NULL }, 1.7 +14 -0 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.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- modperl_cmd.c 2001/08/08 16:20:31 1.6 +++ modperl_cmd.c 2001/09/27 15:46:21 1.7 @@ -84,6 +84,20 @@ return NULL; } + +#ifdef MP_COMPAT_1X + +MP_CMD_SRV_DECLARE_FLAG(taint_check) +{ +if (on) { +return modperl_cmd_switches(parms, dummy, -T); +} + +return NULL; +} + +#endif /* MP_COMPAT_1X */ + #ifdef USE_ITHREADS #define MP_INTERP_SCOPE_USAGE PerlInterpScope must be one of 1.9 +6 -0 modperl-2.0/src/modules/perl/modperl_cmd.h Index: modperl_cmd.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_cmd.h,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- modperl_cmd.h 2001/09/27 15:39:57 1.8 +++ modperl_cmd.h 2001/09/27 15:46:21 1.9 @@ -23,6 +23,12 @@ MP_CMD_SRV_DECLARE(requires); MP_CMD_SRV_DECLARE(options); +#ifdef MP_COMPAT_1X + +MP_CMD_SRV_DECLARE_FLAG(taint_check); + +#endif /* MP_COMPAT_1X */ + #ifdef USE_ITHREADS MP_CMD_SRV_DECLARE(interp_start); MP_CMD_SRV_DECLARE(interp_max);
cvs commit: modperl-2.0/src/modules/perl mod_perl.c mod_perl.h modperl_types.h
dougm 01/09/27 12:04:39 Modified:lib/ModPerl Code.pm src/modules/perl mod_perl.c mod_perl.h modperl_types.h Log: integrate modperl_perl_global module Revision ChangesPath 1.69 +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.68 retrieving revision 1.69 diff -u -r1.68 -r1.69 --- Code.pm 2001/09/20 06:07:48 1.68 +++ Code.pm 2001/09/27 19:04:38 1.69 @@ -525,7 +525,7 @@ my @c_src_names = qw(interp tipool log config cmd options callback handler gtop util io filter bucket mgv pcw global env cgi - perl); + perl perl_global); my @g_c_names = map { modperl_$_ } qw(hooks directives flags xsinit); my @c_names = ('mod_perl', (map modperl_$_, @c_src_names)); sub c_files { [map { $_.c } @c_names, @g_c_names] } 1.75 +4 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.74 retrieving revision 1.75 diff -u -r1.74 -r1.75 --- mod_perl.c2001/09/27 15:56:44 1.74 +++ mod_perl.c2001/09/27 19:04:38 1.75 @@ -510,6 +510,8 @@ rcfg-wbucket.header_parse = 1; } +modperl_perl_global_save(aTHX_ rcfg-perl_globals); + h_stdout = modperl_io_tie_stdout(aTHX_ r); h_stdin = modperl_io_tie_stdin(aTHX_ r); @@ -520,6 +522,8 @@ modperl_io_handle_untie(aTHX_ h_stdin); modperl_env_request_untie(aTHX_ r); + +modperl_perl_global_restore(aTHX_ rcfg-perl_globals); #ifdef USE_ITHREADS if (MpInterpPUTBACK(interp)) { 1.38 +1 -0 modperl-2.0/src/modules/perl/mod_perl.h Index: mod_perl.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.h,v retrieving revision 1.37 retrieving revision 1.38 diff -u -r1.37 -r1.38 --- mod_perl.h2001/09/27 15:26:36 1.37 +++ mod_perl.h2001/09/27 19:04:38 1.38 @@ -12,6 +12,7 @@ #include modperl_flags.h #include modperl_hooks.h +#include modperl_perl_global.h #ifdef MP_USE_GTOP #include modperl_gtop.h 1.47 +1 -0 modperl-2.0/src/modules/perl/modperl_types.h Index: modperl_types.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_types.h,v retrieving revision 1.46 retrieving revision 1.47 diff -u -r1.46 -r1.47 --- modperl_types.h 2001/08/30 05:15:51 1.46 +++ modperl_types.h 2001/09/27 19:04:38 1.47 @@ -205,6 +205,7 @@ modperl_wbucket_t wbucket; MpAV *handlers_per_dir[MP_HANDLER_NUM_PER_DIR]; MpAV *handlers_per_srv[MP_HANDLER_NUM_PER_SRV]; +modperl_perl_globals_t perl_globals; #ifdef USE_ITHREADS modperl_interp_t *interp; #endif
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_cmd.c modperl_cmd.h
dougm 01/09/27 12:35:34 Modified:src/modules/perl mod_perl.c modperl_cmd.c modperl_cmd.h Log: add PerlSendHeader directive for backwards compat Revision ChangesPath 1.76 +2 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.75 retrieving revision 1.76 diff -u -r1.75 -r1.76 --- mod_perl.c2001/09/27 19:04:38 1.75 +++ mod_perl.c2001/09/27 19:35:34 1.76 @@ -426,6 +426,8 @@ Scope of a Perl interpreter), #endif #ifdef MP_COMPAT_1X +MP_CMD_DIR_FLAG(PerlSendHeader, send_header, +Tell mod_perl to scan output for HTTP headers), MP_CMD_DIR_ITERATE(PerlHandler, response_handlers, Subroutine name), MP_CMD_SRV_FLAG(PerlTaintCheck, taint_check, 1.10 +6 -0 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.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- modperl_cmd.c 2001/09/27 15:56:44 1.9 +++ modperl_cmd.c 2001/09/27 19:35:34 1.10 @@ -105,6 +105,12 @@ return NULL; } +MP_CMD_SRV_DECLARE_FLAG(send_header) +{ +char *arg = flag_on ? +ParseHeaders : -ParseHeaders; +return modperl_cmd_options(parms, mconfig, arg); +} + #endif /* MP_COMPAT_1X */ #ifdef USE_ITHREADS 1.12 +1 -0 modperl-2.0/src/modules/perl/modperl_cmd.h Index: modperl_cmd.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_cmd.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- modperl_cmd.h 2001/09/27 15:56:44 1.11 +++ modperl_cmd.h 2001/09/27 19:35:34 1.12 @@ -27,6 +27,7 @@ MP_CMD_SRV_DECLARE_FLAG(taint_check); MP_CMD_SRV_DECLARE_FLAG(warn); +MP_CMD_SRV_DECLARE_FLAG(send_header); #endif /* MP_COMPAT_1X */
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_callback.c modperl_config.c
dougm 01/09/17 16:36:36 Modified:lib/ModPerl Code.pm src/modules/perl mod_perl.c modperl_callback.c modperl_config.c Log: s/Enabled/Enable/g for the PerlOption Revision ChangesPath 1.67 +2 -2 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.66 retrieving revision 1.67 diff -u -r1.66 -r1.67 --- Code.pm 2001/09/15 22:25:55 1.66 +++ Code.pm 2001/09/17 23:36:35 1.67 @@ -91,7 +91,7 @@ my @hook_flags = (map { canon_uc($_) } keys %hooks); my @ithread_opts = qw(CLONE PARENT); my %flags = ( -Srv = ['NONE', @ithread_opts, qw(ENABLED AUTOLOAD MERGE_HANDLERS), +Srv = ['NONE', @ithread_opts, qw(ENABLE AUTOLOAD MERGE_HANDLERS), @hook_flags, 'UNSET'], Dir = [qw(NONE PARSE_HEADERS SETUP_ENV MERGE_HANDLERS GLOBAL_REQUEST UNSET)], Req = [qw(NONE SET_GLOBAL_REQUEST)], @@ -293,7 +293,7 @@ $protostr { $prototype-{cfg}-{get}; -if (!MpSrvENABLED(scfg)) { +if (!MpSrvENABLE(scfg)) { return apr_pstrcat(parms-pool, Perl is disabled for server , parms-server-server_hostname, NULL); 1.71 +2 -2 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.70 retrieving revision 1.71 diff -u -r1.70 -r1.71 --- mod_perl.c2001/09/16 01:05:44 1.70 +++ mod_perl.c2001/09/17 23:36:35 1.71 @@ -135,7 +135,7 @@ } #endif -if (!MpSrvENABLED(base_scfg)) { +if (!MpSrvENABLE(base_scfg)) { /* how silly */ return; } @@ -170,7 +170,7 @@ #ifdef USE_ITHREADS -if (!MpSrvENABLED(scfg)) { +if (!MpSrvENABLE(scfg)) { scfg-mip = NULL; continue; } 1.43 +1 -1 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.42 retrieving revision 1.43 diff -u -r1.42 -r1.43 --- modperl_callback.c2001/05/22 22:13:20 1.42 +++ modperl_callback.c2001/09/17 23:36:36 1.43 @@ -96,7 +96,7 @@ const char *desc = NULL; AV *av_args = Nullav; -if (!MpSrvENABLED(scfg)) { +if (!MpSrvENABLE(scfg)) { MP_TRACE_h(MP_FUNC, PerlOff for server %s\n, s-server_hostname); return DECLINED; 1.37 +1 -1 modperl-2.0/src/modules/perl/modperl_config.c Index: modperl_config.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_config.c,v retrieving revision 1.36 retrieving revision 1.37 diff -u -r1.36 -r1.37 --- modperl_config.c 2001/09/15 20:17:35 1.36 +++ modperl_config.c 2001/09/17 23:36:36 1.37 @@ -68,7 +68,7 @@ apr_pcalloc(p, sizeof(*scfg)); scfg-flags = modperl_options_new(p, MpSrvType); -MpSrvENABLED_On(scfg); /* mod_perl enabled by default */ +MpSrvENABLE_On(scfg); /* mod_perl enabled by default */ MpSrvHOOKS_ALL_On(scfg); /* all hooks enabled by default */ scfg-PerlModule = apr_array_make(p, 2, sizeof(char *));
cvs commit: modperl-2.0/src/modules/perl mod_perl.c mod_perl.h
dougm 01/09/15 15:26:57 Modified:src/modules/perl mod_perl.c mod_perl.h Log: add modperl_hook_child_init call modperl_perl_init_ids from modperl_hook_child_init Revision ChangesPath 1.68 +12 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.67 retrieving revision 1.68 diff -u -r1.67 -r1.68 --- mod_perl.c2001/09/13 03:18:27 1.67 +++ mod_perl.c2001/09/15 22:26:57 1.68 @@ -352,6 +352,15 @@ return OK; } +static void modperl_hook_child_init(apr_pool_t *p, server_rec *s) +{ +#ifdef USE_ITHREADS +/*XXX*/ +#else +modperl_perl_init_ids(aTHX); +#endif +} + void modperl_register_hooks(apr_pool_t *p) { ap_hook_open_logs(modperl_hook_init, @@ -391,6 +400,9 @@ ap_hook_header_parser(modperl_hook_header_parser, NULL, NULL, APR_HOOK_FIRST); + +ap_hook_child_init(modperl_hook_child_init, + NULL, NULL, APR_HOOK_MIDDLE); modperl_register_handler_hooks(); } 1.36 +1 -0 modperl-2.0/src/modules/perl/mod_perl.h Index: mod_perl.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.h,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- mod_perl.h2001/08/19 17:22:55 1.35 +++ mod_perl.h2001/09/15 22:26:57 1.36 @@ -34,6 +34,7 @@ #include modperl_global.h #include modperl_env.h #include modperl_cgi.h +#include modperl_perl.h void modperl_init(server_rec *s, apr_pool_t *p); void modperl_hook_init(apr_pool_t *pconf, apr_pool_t *plog,
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_perl.c modperl_perl.h
dougm 01/09/15 17:56:15 Modified:src/modules/perl mod_perl.c modperl_perl.c modperl_perl.h Log: init ids for ithread Perls Revision ChangesPath 1.69 +6 -2 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.68 retrieving revision 1.69 diff -u -r1.68 -r1.69 --- mod_perl.c2001/09/15 22:26:57 1.68 +++ mod_perl.c2001/09/16 00:56:15 1.69 @@ -354,10 +354,14 @@ static void modperl_hook_child_init(apr_pool_t *p, server_rec *s) { +modperl_perl_ids_t ids; +modperl_perl_ids_get(ids); #ifdef USE_ITHREADS -/*XXX*/ + modperl_interp_mip_walk_servers(NULL, s, + modperl_perl_init_ids_mip, +(void*)ids); #else -modperl_perl_init_ids(aTHX); +modperl_perl_init_ids(aTHX_ ids); #endif } 1.2 +28 -8 modperl-2.0/src/modules/perl/modperl_perl.c Index: modperl_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- modperl_perl.c2001/09/15 22:25:29 1.1 +++ modperl_perl.c2001/09/16 00:56:15 1.2 @@ -4,17 +4,37 @@ * others (larger tweaks) are in their own modules, e.g. modperl_env.c */ -void modperl_perl_init_ids(pTHX) +void modperl_perl_ids_get(modperl_perl_ids_t *ids) { -sv_setiv(GvSV(gv_fetchpv($, TRUE, SVt_PV)), (I32)getpid()); - +ids-pid = (I32)getpid(); #ifndef WIN32 -PL_uid = (int)getuid(); -PL_euid = (int)geteuid(); -PL_gid = (int)getgid(); -PL_egid = (int)getegid(); +ids-uid = getuid(); +ids-euid = geteuid(); +ids-gid = getgid(); +ids-gid = getegid(); + MP_TRACE_g(MP_FUNC, uid=%d, euid=%d, gid=%d, egid=%d\n, - PL_uid, PL_euid, PL_gid, PL_egid); + (int)ids-uid, (int)ids-euid, + (int)ids-gid, (int)ids-egid); #endif +} + +void modperl_perl_init_ids(pTHX_ modperl_perl_ids_t *ids) +{ +sv_setiv(GvSV(gv_fetchpv($, TRUE, SVt_PV)), ids-pid); + +#ifndef WIN32 +PL_uid = ids-uid; +PL_euid = ids-euid; +PL_gid = ids-gid; +PL_egid = ids-egid; +#endif +} + +apr_status_t modperl_perl_init_ids_mip(pTHX_ modperl_interp_pool_t *mip, + void *data) +{ +modperl_perl_init_ids(aTHX_ (modperl_perl_ids_t *)data); +return APR_SUCCESS; } 1.2 +12 -1 modperl-2.0/src/modules/perl/modperl_perl.h Index: modperl_perl.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- modperl_perl.h2001/09/15 22:25:29 1.1 +++ modperl_perl.h2001/09/16 00:56:15 1.2 @@ -1,6 +1,17 @@ #ifndef MODPERL_PERL_H #define MODPERL_PERL_H -void modperl_perl_init_ids(pTHX); +typedef struct { +I32 pid; +Uid_t uid, euid; +Gid_t gid, egid; +} modperl_perl_ids_t; + +void modperl_perl_ids_get(modperl_perl_ids_t *ids); + +void modperl_perl_init_ids(pTHX_ modperl_perl_ids_t *ids); + +apr_status_t modperl_perl_init_ids_mip(pTHX_ modperl_interp_pool_t *mip, + void *data); #endif /* MODPERL_PERL_H */
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_perl.c modperl_perl.h
dougm 01/09/15 18:05:44 Modified:src/modules/perl mod_perl.c modperl_perl.c modperl_perl.h Log: move code out of modperl_hook_child_init into modperl_perl_init_ids_server Revision ChangesPath 1.70 +1 -9 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.69 retrieving revision 1.70 diff -u -r1.69 -r1.70 --- mod_perl.c2001/09/16 00:56:15 1.69 +++ mod_perl.c2001/09/16 01:05:44 1.70 @@ -354,15 +354,7 @@ static void modperl_hook_child_init(apr_pool_t *p, server_rec *s) { -modperl_perl_ids_t ids; -modperl_perl_ids_get(ids); -#ifdef USE_ITHREADS - modperl_interp_mip_walk_servers(NULL, s, - modperl_perl_init_ids_mip, -(void*)ids); -#else -modperl_perl_init_ids(aTHX_ ids); -#endif +modperl_perl_init_ids_server(s); } void modperl_register_hooks(apr_pool_t *p) 1.3 +13 -0 modperl-2.0/src/modules/perl/modperl_perl.c Index: modperl_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- modperl_perl.c2001/09/16 00:56:15 1.2 +++ modperl_perl.c2001/09/16 01:05:44 1.3 @@ -38,3 +38,16 @@ modperl_perl_init_ids(aTHX_ (modperl_perl_ids_t *)data); return APR_SUCCESS; } + +void modperl_perl_init_ids_server(server_rec *s) +{ +modperl_perl_ids_t ids; +modperl_perl_ids_get(ids); +#ifdef USE_ITHREADS + modperl_interp_mip_walk_servers(NULL, s, + modperl_perl_init_ids_mip, +(void*)ids); +#else +modperl_perl_init_ids(aTHX_ ids); +#endif +} 1.3 +2 -0 modperl-2.0/src/modules/perl/modperl_perl.h Index: modperl_perl.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- modperl_perl.h2001/09/16 00:56:15 1.2 +++ modperl_perl.h2001/09/16 01:05:44 1.3 @@ -14,4 +14,6 @@ apr_status_t modperl_perl_init_ids_mip(pTHX_ modperl_interp_pool_t *mip, void *data); +void modperl_perl_init_ids_server(server_rec *s); + #endif /* MODPERL_PERL_H */
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 01/09/12 19:10:35 Modified:src/modules/perl mod_perl.c Log: add a bootstrap note for APR Revision ChangesPath 1.65 +13 -5 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.64 retrieving revision 1.65 diff -u -r1.64 -r1.65 --- mod_perl.c2001/09/10 04:43:03 1.64 +++ mod_perl.c2001/09/13 02:10:35 1.65 @@ -24,13 +24,21 @@ } #endif -static void my_xs_init(pTHX) +static const char *MP_xs_loaders[] = { +ModPerl, APR, NULL, +}; + +#define MP_xs_loader_name %s::XSLoader::BOOTSTRAP + +static void modperl_xs_init(pTHX) { +int i; xs_init(aTHX); /* see modperl_xsinit.c */ -newCONSTSUB(PL_defstash, -ModPerl::XSLoader::BOOTSTRAP, -newSViv(1)); +for (i=0; MP_xs_loaders[i]; i++) { +char *name = Perl_form(aTHX_ MP_xs_loader_name, MP_xs_loaders[i]); +newCONSTSUB(PL_defstash, name, newSViv(1)); +} } PerlInterpreter *modperl_startup(server_rec *s, apr_pool_t *p) @@ -65,7 +73,7 @@ PL_perl_destruct_level = 2; } #endif -status = perl_parse(perl, my_xs_init, argc, argv, NULL); +status = perl_parse(perl, modperl_xs_init, argc, argv, NULL); if (status) { perror(perl_parse);
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 01/09/09 21:43:03 Modified:lib/ModPerl WrapXS.pm src/modules/perl mod_perl.c Added: lib/ModPerl XSLoader.pm Log: do not bootstrap xs libs outside of httpd Revision ChangesPath 1.20 +2 -2 modperl-2.0/lib/ModPerl/WrapXS.pm Index: WrapXS.pm === RCS file: /home/cvs/modperl-2.0/lib/ModPerl/WrapXS.pm,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- WrapXS.pm 2001/06/26 16:26:51 1.19 +++ WrapXS.pm 2001/09/10 04:43:02 1.20 @@ -488,9 +488,9 @@ package $module; $isa -use XSLoader (); +use ModPerl::XSLoader (); our \$VERSION = '0.01'; -XSLoader::load __PACKAGE__; +ModPerl::XSLoader::load __PACKAGE__; $code 1.1 modperl-2.0/lib/ModPerl/XSLoader.pm Index: XSLoader.pm === package ModPerl::XSLoader; use strict; use warnings FATAL = 'all'; use XSLoader (); BEGIN { unless (defined BOOTSTRAP) { *BOOTSTRAP = sub () { 0 }; } } sub load { return unless BOOTSTRAP; XSLoader::load(@_); } 1; 1.64 +10 -1 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.63 retrieving revision 1.64 diff -u -r1.63 -r1.64 --- mod_perl.c2001/08/30 05:15:51 1.63 +++ mod_perl.c2001/09/10 04:43:03 1.64 @@ -24,6 +24,15 @@ } #endif +static void my_xs_init(pTHX) +{ +xs_init(aTHX); /* see modperl_xsinit.c */ + +newCONSTSUB(PL_defstash, +ModPerl::XSLoader::BOOTSTRAP, +newSViv(1)); +} + PerlInterpreter *modperl_startup(server_rec *s, apr_pool_t *p) { MP_dSCFG(s); @@ -56,7 +65,7 @@ PL_perl_destruct_level = 2; } #endif -status = perl_parse(perl, xs_init, argc, argv, NULL); +status = perl_parse(perl, my_xs_init, argc, argv, NULL); if (status) { perror(perl_parse);
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_filter.c modperl_types.h
dougm 01/08/29 22:15:51 Modified:src/modules/perl mod_perl.c modperl_filter.c modperl_types.h Log: change wbucket buffer api to use the address of r-output_filters so when a filter is removed from the chain, its is also remove from ours Revision ChangesPath 1.63 +1 -1 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.62 retrieving revision 1.63 diff -u -r1.62 -r1.63 --- mod_perl.c2001/08/08 16:20:31 1.62 +++ mod_perl.c2001/08/30 05:15:51 1.63 @@ -399,7 +399,7 @@ /* setup buffer for output */ rcfg-wbucket.pool = r-pool; -rcfg-wbucket.filters = r-output_filters; +rcfg-wbucket.filters = r-output_filters; rcfg-wbucket.outcnt = 0; } 1.25 +2 -2 modperl-2.0/src/modules/perl/modperl_filter.c Index: modperl_filter.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_filter.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- modperl_filter.c 2001/08/30 01:08:24 1.24 +++ modperl_filter.c 2001/08/30 05:15:51 1.25 @@ -34,7 +34,7 @@ MP_TRACE_f(MP_FUNC, buffer length=%d\n, len); -return ap_pass_brigade(wb-filters, bb); +return ap_pass_brigade(*(wb-filters), bb); } MP_INLINE apr_status_t modperl_wbucket_flush(modperl_wbucket_t *wb) @@ -91,7 +91,7 @@ filter-bb = bb; filter-pool = p; filter-wbucket.pool = p; -filter-wbucket.filters = f-next; +filter-wbucket.filters = f-next; filter-wbucket.outcnt = 0; MP_TRACE_f(MP_FUNC, filter=0x%lx, mode=%s\n, 1.46 +1 -1 modperl-2.0/src/modules/perl/modperl_types.h Index: modperl_types.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_types.h,v retrieving revision 1.45 retrieving revision 1.46 diff -u -r1.45 -r1.46 --- modperl_types.h 2001/08/19 17:33:32 1.45 +++ modperl_types.h 2001/08/30 05:15:51 1.46 @@ -168,7 +168,7 @@ int outcnt; char outbuf[MP_IOBUFSIZE]; apr_pool_t *pool; -ap_filter_t *filters; +ap_filter_t **filters; int header_parse; request_rec *r; } modperl_wbucket_t;
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 01/07/13 09:49:54 Modified:src/modules/perl mod_perl.c Log: outline for future calls to PERL_SYS_{INIT,TERM} and PTHREAD_ATFORK Revision ChangesPath 1.59 +28 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.58 retrieving revision 1.59 diff -u -r1.58 -r1.59 --- mod_perl.c2001/05/14 03:34:34 1.58 +++ mod_perl.c2001/07/13 16:49:35 1.59 @@ -219,9 +219,37 @@ modperl_tls_create_request_rec(pconf); } +static apr_status_t modperl_sys_init(void) +{ +#if 0 /*XXX*/ +PERL_SYS_INIT(0, NULL); + +#ifdef PTHREAD_ATFORK +if (!ap_exists_config_define(PERL_PTHREAD_ATFORK_DONE)) { +PTHREAD_ATFORK(Perl_atfork_lock, + Perl_atfork_unlock, + Perl_atfork_unlock); +*(char **)apr_array_push(ap_server_config_defines) = +PERL_PTHREAD_ATFORK_DONE; +} +#endif +#endif +return APR_SUCCESS; +} + +static apr_status_t modperl_sys_term(void *data) +{ +#if 0 /*XXX*/ +PERL_SYS_TERM(); +#endif +return APR_SUCCESS; +} + void modperl_hook_init(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) { +modperl_sys_init(); +apr_pool_cleanup_register(pconf, NULL, modperl_sys_term, NULL); modperl_init_globals(s, pconf); modperl_init(s, pconf); }
cvs commit: modperl-2.0/src/modules/perl mod_perl.c mod_perl.h modperl_types.h
dougm 01/04/29 21:38:37 Modified:src/modules/perl mod_perl.c mod_perl.h modperl_types.h Log: integrate modperl_global module and initialize pconf/request_rec globals Revision ChangesPath 1.51 +13 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.50 retrieving revision 1.51 diff -u -r1.50 -r1.51 --- mod_perl.c2001/04/25 16:19:44 1.50 +++ mod_perl.c2001/04/30 04:38:34 1.51 @@ -207,6 +207,12 @@ } #endif /* USE_ITHREADS */ +static void modperl_init_globals(apr_pool_t *pconf) +{ +modperl_global_init_pconf(pconf, (void *)pconf); +modperl_tls_create_request_rec(pconf); +} + void modperl_hook_init(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) { @@ -237,6 +243,7 @@ ap_add_version_component(pconf, Perl_form(aTHX_ Perl/v%vd, PL_patchlevel)); modperl_mgv_hash_handlers(pconf, s); +modperl_init_globals(pconf); #ifdef USE_ITHREADS modperl_init_clones(s, pconf); #endif @@ -253,11 +260,17 @@ static int modperl_hook_post_read_request(request_rec *r) { +/* if 'PerlOptions +GlobalRequest' is outside a container */ +modperl_global_request_cfg_set(r); + return modperl_input_filter_register_request(r); } static int modperl_hook_header_parser(request_rec *r) { +/* if 'PerlOptions +GlobalRequest' is inside a container */ +modperl_global_request_cfg_set(r); + return modperl_input_filter_register_request(r); } 1.30 +3 -0 modperl-2.0/src/modules/perl/mod_perl.h Index: mod_perl.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.h,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- mod_perl.h2001/04/19 21:26:34 1.29 +++ mod_perl.h2001/04/30 04:38:35 1.30 @@ -4,6 +4,8 @@ #include modperl_apache_includes.h #include modperl_perl_includes.h +#define MP_THREADED (defined(USE_ITHREADS) APR_HAS_THREADS) + extern module AP_MODULE_DECLARE_DATA perl_module; #include modperl_flags.h @@ -27,6 +29,7 @@ #include modperl_filter.h #include modperl_pcw.h #include modperl_mgv.h +#include modperl_global.h void modperl_init(server_rec *s, apr_pool_t *p); void modperl_hook_init(apr_pool_t *pconf, apr_pool_t *plog, 1.39 +2 -0 modperl-2.0/src/modules/perl/modperl_types.h Index: modperl_types.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_types.h,v retrieving revision 1.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- modperl_types.h 2001/04/28 23:03:08 1.38 +++ modperl_types.h 2001/04/30 04:38:35 1.39 @@ -197,6 +197,8 @@ typedef struct { HV *pnotes; +SV *global_request_obj; +U8 flags; modperl_wbucket_t wbucket; MpAV *handlers_per_dir[MP_HANDLER_NUM_PER_DIR]; MpAV *handlers_per_srv[MP_HANDLER_NUM_PER_SRV];
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 01/04/25 09:19:45 Modified:src/modules/perl mod_perl.c Log: fix #ifndef USE_ITHREADS Revision ChangesPath 1.50 +1 -1 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.49 retrieving revision 1.50 diff -u -r1.49 -r1.50 --- mod_perl.c2001/04/19 18:08:08 1.49 +++ mod_perl.c2001/04/25 16:19:44 1.50 @@ -17,7 +17,7 @@ perl_free(perl); if (handles) { -modperl_xs_dl_handles_close(handles); +modperl_xs_dl_handles_close(cdata-pool, handles); } return APR_SUCCESS;
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_filter.c modperl_filter.h
dougm 01/04/19 10:44:22 Modified:src/modules/perl mod_perl.c modperl_filter.c modperl_filter.h Log: register/run PerlInputFilterHandlers Revision ChangesPath 1.48 +30 -2 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.47 retrieving revision 1.48 diff -u -r1.47 -r1.48 --- mod_perl.c2001/04/12 16:15:19 1.47 +++ mod_perl.c2001/04/19 17:44:15 1.48 @@ -221,6 +221,11 @@ */ } +static int modperl_hook_pre_connection(conn_rec *c) +{ +return modperl_input_filter_register_connection(c); +} + static void modperl_hook_post_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) { @@ -246,10 +251,23 @@ return OK; } +static int modperl_hook_post_read_request(request_rec *r) +{ +return modperl_input_filter_register_request(r); +} + +static int modperl_hook_header_parser(request_rec *r) +{ +return modperl_input_filter_register_request(r); +} + void modperl_register_hooks(apr_pool_t *p) { ap_hook_open_logs(modperl_hook_init, NULL, NULL, APR_HOOK_MIDDLE); +ap_hook_post_config(modperl_hook_post_config, NULL, NULL, +APR_HOOK_MIDDLE); + ap_hook_handler(modperl_response_handler, NULL, NULL, APR_HOOK_MIDDLE); ap_hook_insert_filter(modperl_output_filter_register, @@ -259,11 +277,21 @@ modperl_output_filter_handler, AP_FTYPE_CONTENT); +ap_register_input_filter(MODPERL_INPUT_FILTER_NAME, + modperl_input_filter_handler, + AP_FTYPE_CONTENT); + +ap_hook_pre_connection(modperl_hook_pre_connection, + NULL, NULL, APR_HOOK_FIRST); + ap_hook_create_request(modperl_hook_create_request, NULL, NULL, APR_HOOK_MIDDLE); -ap_hook_post_config(modperl_hook_post_config, NULL, NULL, -APR_HOOK_MIDDLE); +ap_hook_post_read_request(modperl_hook_post_read_request, NULL, NULL, + APR_HOOK_FIRST); + +ap_hook_header_parser(modperl_hook_header_parser, NULL, NULL, + APR_HOOK_FIRST); modperl_register_handler_hooks(); } 1.12 +121 -3modperl-2.0/src/modules/perl/modperl_filter.c Index: modperl_filter.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_filter.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- modperl_filter.c 2001/04/18 04:37:46 1.11 +++ modperl_filter.c 2001/04/19 17:44:17 1.12 @@ -79,7 +79,7 @@ return filter; } -int modperl_run_filter(modperl_filter_t *filter) +int modperl_run_filter(modperl_filter_t *filter, ap_input_mode_t mode) { AV *args = Nullav; int status; @@ -88,7 +88,7 @@ request_rec *r = filter-f-r; conn_rec*c = filter-f-c; -server_rec *s = r ? r-server : NULL; +server_rec *s = r ? r-server : c-base_server; apr_pool_t *p = r ? r-pool : c-pool; MP_dINTERP_SELECT(r, c, s); @@ -98,6 +98,10 @@ "APR::Brigade", filter-bb, NULL); +if (filter-mode == MP_INPUT_FILTER_MODE) { +av_push(args, newSViv(mode)); +} + if ((status = modperl_callback(aTHX_ handler, p, s, args)) != OK) { status = modperl_errsv(aTHX_ status, r, s); } @@ -319,7 +323,7 @@ } else { filter = modperl_filter_new(f, bb, MP_OUTPUT_FILTER_MODE); -status = modperl_run_filter(filter); +status = modperl_run_filter(filter, 0); } switch (status) { @@ -332,6 +336,32 @@ } } +apr_status_t modperl_input_filter_handler(ap_filter_t *f, + apr_bucket_brigade *bb, + ap_input_mode_t mode) +{ +modperl_filter_t *filter; +int status; + +if (APR_BRIGADE_IS_EOS(bb)) { +/* XXX: see about preventing this in the first place */ +MP_TRACE_f(MP_FUNC, "first bucket is EOS, skipping callback\n"); +return APR_SUCCESS; +} +else { +filter = modperl_filter_new(f, bb, MP_INPUT_FILTER_MODE); +status = modperl_run_filter(filter, mode); +} + +switch (status) { + case OK: + case DECLINED: +return APR_SUCCESS; + default: +return status; /*XXX*/ +} +}
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 01/04/19 11:08:10 Modified:src/modules/perl mod_perl.c Log: tidy a bit Revision ChangesPath 1.49 +12 -10modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.48 retrieving revision 1.49 diff -u -r1.48 -r1.49 --- mod_perl.c2001/04/19 17:44:15 1.48 +++ mod_perl.c2001/04/19 18:08:08 1.49 @@ -263,12 +263,14 @@ void modperl_register_hooks(apr_pool_t *p) { -ap_hook_open_logs(modperl_hook_init, NULL, NULL, APR_HOOK_MIDDLE); +ap_hook_open_logs(modperl_hook_init, + NULL, NULL, APR_HOOK_MIDDLE); -ap_hook_post_config(modperl_hook_post_config, NULL, NULL, -APR_HOOK_MIDDLE); +ap_hook_post_config(modperl_hook_post_config, +NULL, NULL, APR_HOOK_MIDDLE); -ap_hook_handler(modperl_response_handler, NULL, NULL, APR_HOOK_MIDDLE); +ap_hook_handler(modperl_response_handler, +NULL, NULL, APR_HOOK_MIDDLE); ap_hook_insert_filter(modperl_output_filter_register, NULL, NULL, APR_HOOK_LAST); @@ -284,14 +286,14 @@ ap_hook_pre_connection(modperl_hook_pre_connection, NULL, NULL, APR_HOOK_FIRST); -ap_hook_create_request(modperl_hook_create_request, NULL, NULL, - APR_HOOK_MIDDLE); +ap_hook_create_request(modperl_hook_create_request, + NULL, NULL, APR_HOOK_MIDDLE); -ap_hook_post_read_request(modperl_hook_post_read_request, NULL, NULL, - APR_HOOK_FIRST); +ap_hook_post_read_request(modperl_hook_post_read_request, + NULL, NULL, APR_HOOK_FIRST); -ap_hook_header_parser(modperl_hook_header_parser, NULL, NULL, - APR_HOOK_FIRST); +ap_hook_header_parser(modperl_hook_header_parser, + NULL, NULL, APR_HOOK_FIRST); modperl_register_handler_hooks(); }
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 01/04/11 18:03:14 Modified:src/modules/perl mod_perl.c Log: i swear eric did this already Revision ChangesPath 1.45 +1 -1 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.44 retrieving revision 1.45 diff -u -r1.44 -r1.45 --- mod_perl.c2001/04/10 13:55:51 1.44 +++ mod_perl.c2001/04/12 01:03:14 1.45 @@ -14,7 +14,7 @@ perl_destruct(perl); perl_free(perl); -if (handles = modperl_xs_dl_handles_get(cdata-pool)) { +if ((handles = modperl_xs_dl_handles_get(cdata-pool))) { modperl_xs_dl_handles_close(handles); }
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_callback.c modperl_callback.h
dougm 01/03/15 21:08:15 Modified:lib/ModPerl Code.pm src/modules/perl mod_perl.c modperl_callback.c modperl_callback.h Log: use proper prefix for all modperl_callback_ functions Revision ChangesPath 1.46 +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.45 retrieving revision 1.46 diff -u -r1.45 -r1.46 --- Code.pm 2001/03/16 04:58:57 1.45 +++ Code.pm 2001/03/16 05:08:15 1.46 @@ -167,7 +167,7 @@ my @register_hooks; while (my($class, $prototype) = each %{ $self-{hook_proto} }) { -my $callback = canon_func($class, 'callback'); +my $callback = canon_func('callback', $class); my $return = $prototype-{ret} eq 'void' ? '' : 'return'; my $i = -1; 1.37 +1 -1 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.36 retrieving revision 1.37 diff -u -r1.36 -r1.37 --- mod_perl.c2001/03/15 04:34:04 1.36 +++ mod_perl.c2001/03/16 05:08:15 1.37 @@ -286,7 +286,7 @@ modperl_response_init(r); -retval = modperl_per_dir_callback(MP_RESPONSE_HANDLER, r); +retval = modperl_callback_per_dir(MP_RESPONSE_HANDLER, r); if ((retval == DECLINED) r-content_type) { r-handler = r-content_type; /* let http_core or whatever try */ 1.31 +21 -16modperl-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.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- modperl_callback.c2001/03/16 04:58:58 1.30 +++ modperl_callback.c2001/03/16 05:08:15 1.31 @@ -91,8 +91,8 @@ return status; } -int modperl_run_handlers(int idx, request_rec *r, conn_rec *c, - server_rec *s, int type, ...) +int modperl_callback_run_handlers(int idx, request_rec *r, conn_rec *c, + server_rec *s, int type, ...) { #ifdef USE_ITHREADS pTHX; @@ -230,33 +230,38 @@ return status; } -int modperl_per_dir_callback(int idx, request_rec *r) +int modperl_callback_per_dir(int idx, request_rec *r) { -return modperl_run_handlers(idx, r, NULL, r-server, -MP_HANDLER_TYPE_PER_DIR); +return modperl_callback_run_handlers(idx, r, NULL, + r-server, + MP_HANDLER_TYPE_PER_DIR); } -int modperl_per_srv_callback(int idx, request_rec *r) +int modperl_callback_per_srv(int idx, request_rec *r) { -return modperl_run_handlers(idx, r, NULL, r-server, -MP_HANDLER_TYPE_PER_SRV); +return modperl_callback_run_handlers(idx, r, NULL, + r-server, + MP_HANDLER_TYPE_PER_SRV); } -int modperl_connection_callback(int idx, conn_rec *c) +int modperl_callback_connection(int idx, conn_rec *c) { -return modperl_run_handlers(idx, NULL, c, c-base_server, -MP_HANDLER_TYPE_CONNECTION); +return modperl_callback_run_handlers(idx, NULL, c, + c-base_server, + MP_HANDLER_TYPE_CONNECTION); } -void modperl_process_callback(int idx, apr_pool_t *p, server_rec *s) +void modperl_callback_process(int idx, apr_pool_t *p, server_rec *s) { -modperl_run_handlers(idx, NULL, NULL, s, MP_HANDLER_TYPE_PROCESS, p); +modperl_callback_run_handlers(idx, NULL, NULL, s, + MP_HANDLER_TYPE_PROCESS, p); } -void modperl_files_callback(int idx, +void modperl_callback_files(int idx, apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) { -modperl_run_handlers(idx, NULL, NULL, s, MP_HANDLER_TYPE_FILES, - pconf, plog, ptemp); +modperl_callback_run_handlers(idx, NULL, NULL, s, + MP_HANDLER_TYPE_FILES, + pconf, plog, ptemp); } 1.17 +9 -9 modperl-2.0/src/modules/perl/modperl_callback.h Index: modperl_callback.h === RCS file:
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_config.c modperl_config.h modperl_interp.c modperl_types.h
dougm 01/03/14 00:22:51 Modified:src/modules/perl mod_perl.c modperl_config.c modperl_config.h modperl_interp.c modperl_types.h Log: allow PerlInterpLifetime to be per-dir for subrequest and request lifetime Revision ChangesPath 1.32 +3 -3 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- mod_perl.c2001/03/14 05:22:49 1.31 +++ mod_perl.c2001/03/14 08:22:47 1.32 @@ -129,7 +129,7 @@ char *name = modperl_server_desc(s, p); MP_TRACE_i(MP_FUNC, "PerlInterpLifetime set to %s for %s\n", - modperl_interp_lifetime_desc(scfg), name); + modperl_interp_lifetime_desc(scfg-interp_lifetime), name); #endif /* MP_TRACE */ if (scfg-mip-tipool-idle) { @@ -220,8 +220,8 @@ "Min number of spare Perl interpreters"), MP_SRV_CMD_TAKE1("PerlInterpMaxRequests", interp_max_requests, "Max number of requests per Perl interpreters"), -MP_SRV_CMD_TAKE1("PerlInterpLifetime", interp_lifetime, - "Lifetime of a Perl interpreter (connection or request)"), +MP_DIR_CMD_TAKE1("PerlInterpLifetime", interp_lifetime, + "Lifetime of a Perl interpreter"), #endif MP_CMD_ENTRIES, { NULL }, 1.20 +32 -7 modperl-2.0/src/modules/perl/modperl_config.c Index: modperl_config.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_config.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- modperl_config.c 2001/03/14 05:22:49 1.19 +++ modperl_config.c 2001/03/14 08:22:48 1.20 @@ -21,6 +21,12 @@ void *modperl_create_dir_config(apr_pool_t *p, char *dir) { modperl_dir_config_t *dcfg = modperl_dir_config_new(p); + +#ifdef USE_ITHREADS +/* defaults to per-server lifetime */ +dcfg-interp_lifetime = MP_INTERP_LIFETIME_UNDEF; +#endif + return dcfg; } @@ -226,31 +232,50 @@ #ifdef USE_ITHREADS static const char *MP_interp_lifetime_desc[] = { -"none", "request", "connection", +"undef", "subrequest", "request", "connection", }; -const char *modperl_interp_lifetime_desc(modperl_srv_config_t *scfg) +const char *modperl_interp_lifetime_desc(modperl_interp_lifetime_e lifetime) { -return MP_interp_lifetime_desc[scfg-interp_lifetime]; +return MP_interp_lifetime_desc[lifetime]; } +#define MP_INTERP_LIFETIME_OPTS "PerlInterpLifetime must be one of " + +#define MP_INTERP_LIFETIME_DIR_OPTS \ +MP_INTERP_LIFETIME_OPTS "subrequest or request" + +#define MP_INTERP_LIFETIME_SRV_OPTS \ +MP_INTERP_LIFETIME_OPTS "subrequest, request or connection" + MP_DECLARE_SRV_CMD(interp_lifetime) { +modperl_interp_lifetime_e *lifetime; +modperl_dir_config_t *dcfg = (modperl_dir_config_t *)dummy; MP_dSCFG(parms-server); +int is_per_dir = parms-path ? 1 : 0; + +lifetime = is_per_dir ? dcfg-interp_lifetime : scfg-interp_lifetime; switch (toLOWER(*arg)) { + case 's': +if (strcaseEQ(arg, "subrequest")) { +*lifetime = MP_INTERP_LIFETIME_SUBREQUEST; +break; +} case 'r': if (strcaseEQ(arg, "request")) { -scfg-interp_lifetime = MP_INTERP_LIFETIME_REQUEST; +*lifetime = MP_INTERP_LIFETIME_REQUEST; break; } case 'c': -if (strcaseEQ(arg, "connection")) { -scfg-interp_lifetime = MP_INTERP_LIFETIME_CONNECTION; +if (!is_per_dir strcaseEQ(arg, "connection")) { +*lifetime = MP_INTERP_LIFETIME_CONNECTION; break; } default: -return "PerlInterpLifetime must be one of connection or request"; +return is_per_dir ? +MP_INTERP_LIFETIME_DIR_OPTS : MP_INTERP_LIFETIME_SRV_OPTS; }; return NULL; 1.19 +13 -3 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.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- modperl_config.h 2001/03/14 05:22:49 1.18 +++ modperl_config.h 2001/03/14 08:22:48 1.19 @@ -35,14 +35,20 @@ MP_DECLARE_SRV_CMD(interp_max_requests); MP_DECLARE_SRV_CMD(interp_lifetime); -const char *modperl_interp_lifetime_desc(modperl_srv_config_t *scfg); +const char
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_gtop.c modperl_gtop.h
dougm 01/03/14 17:55:44 Modified:src/modules/perl mod_perl.c modperl_gtop.c modperl_gtop.h Log: fixes to compile without MP_TRACE Revision ChangesPath 1.34 +2 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.33 retrieving revision 1.34 diff -u -r1.33 -r1.34 --- mod_perl.c2001/03/15 01:47:00 1.33 +++ mod_perl.c2001/03/15 01:55:44 1.34 @@ -151,6 +151,8 @@ MP_TRACE_i(MP_FUNC, "PerlInterpLifetime set to %s for %s\n", modperl_interp_lifetime_desc(scfg-interp_lifetime), name); +#else +char *name = NULL; #endif /* MP_TRACE */ if (scfg-mip-tipool-idle) { 1.7 +2 -2 modperl-2.0/src/modules/perl/modperl_gtop.c Index: modperl_gtop.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_gtop.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- modperl_gtop.c2001/03/04 18:49:38 1.6 +++ modperl_gtop.c2001/03/15 01:55:44 1.7 @@ -1,6 +1,6 @@ -#ifdef MP_USE_GTOP - #include "mod_perl.h" + +#ifdef MP_USE_GTOP static int modperl_gtop_size_string(size_t size, char *size_string) { 1.3 +4 -0 modperl-2.0/src/modules/perl/modperl_gtop.h Index: modperl_gtop.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_gtop.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- modperl_gtop.h2000/08/14 03:10:45 1.2 +++ modperl_gtop.h2001/03/15 01:55:44 1.3 @@ -1,6 +1,10 @@ #ifndef MODPERL_GTOP_H #define MODPERL_GTOP_H +#ifndef MP_TRACE +#undef MP_USE_GTOP +#endif + #ifdef MP_USE_GTOP #include glibtop.h
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_interp.c
dougm 01/03/14 20:34:04 Modified:src/modules/perl mod_perl.c modperl_interp.c Log: need to PERL_SET_CONTEXT to parent perl in non-threaded mpms give a little more trace info about interpreters in virtual hosts Revision ChangesPath 1.36 +3 -2 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- mod_perl.c2001/03/15 02:17:35 1.35 +++ mod_perl.c2001/03/15 04:34:04 1.36 @@ -98,8 +98,9 @@ /* if alloc flags is On, virtual host gets its own parent perl */ if (MpSrvPARENT(scfg)) { perl = modperl_startup(s, p); -MP_TRACE_i(MP_FUNC, "modperl_startup() server=%s\n", - s-server_hostname); +MP_TRACE_i(MP_FUNC, + "created parent interpreter for VirtualHost %s\n", + modperl_server_desc(s, p)); } #ifdef USE_ITHREADS 1.24 +6 -2 modperl-2.0/src/modules/perl/modperl_interp.c Index: modperl_interp.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_interp.c,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- modperl_interp.c 2001/03/15 02:17:35 1.23 +++ modperl_interp.c 2001/03/15 04:34:04 1.24 @@ -215,8 +215,12 @@ modperl_interp_lifetime_e lifetime; if (!scfg-threaded_mpm) { -MP_TRACE_i(MP_FUNC, "using parent 0x%lx for non-threaded mpm\n", - (unsigned long)scfg-mip-parent); +MP_TRACE_i(MP_FUNC, + "using parent 0x%lx for non-threaded mpm (%s:%d)\n", + (unsigned long)scfg-mip-parent, + s-server_hostname, s-port); +/* XXX: if no VirtualHosts w/ PerlOptions +Parent we can skip this */ +PERL_SET_CONTEXT(scfg-mip-parent-perl); return scfg-mip-parent; }
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_util.c modperl_util.h
dougm 01/03/13 20:22:51 Modified:src/modules/perl mod_perl.c modperl_util.c modperl_util.h Log: add modperl_server_desc() function add more trace details when initializing the interpreter pool Revision ChangesPath 1.30 +25 -6 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- mod_perl.c2001/03/09 23:46:34 1.29 +++ mod_perl.c2001/03/14 04:22:51 1.30 @@ -93,7 +93,7 @@ */ if (MpSrvPARENT(scfg) || MpSrvCLONE(scfg)) { MP_TRACE_i(MP_FUNC, "modperl_interp_init() server=%s\n", - s-server_hostname); + modperl_server_desc(s, p)); modperl_interp_init(s, p, perl); } @@ -118,20 +118,39 @@ #ifdef USE_ITHREADS static void modperl_init_clones(server_rec *s, apr_pool_t *p) { +#ifdef MP_TRACE +modperl_srv_config_t *base_scfg = modperl_srv_config_get(s); +char *base_name = modperl_server_desc(s, p); +#endif /* MP_TRACE */ + for (; s; s=s-next) { MP_dSCFG(s); +#ifdef MP_TRACE +char *name = modperl_server_desc(s, p); +#endif /* MP_TRACE */ + if (scfg-mip-tipool-idle) { -MP_TRACE_i(MP_FUNC, "%s interp already cloned\n", - s-server_hostname); +#ifdef MP_TRACE +if (scfg-mip == base_scfg-mip) { +MP_TRACE_i(MP_FUNC, + "%s interp pool inherited from %s\n", + name, base_name); +} +else { +MP_TRACE_i(MP_FUNC, + "%s interp pool already initialized\n", + name); +} +#endif /* MP_TRACE */ } else { -MP_TRACE_i(MP_FUNC, "cloning interp for %s\n", - s-server_hostname); +MP_TRACE_i(MP_FUNC, "initializing interp pool for %s\n", + name); modperl_tipool_init(scfg-mip-tipool); } } } -#endif +#endif /* USE_ITHREADS */ void modperl_hook_init(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) 1.5 +5 -0 modperl-2.0/src/modules/perl/modperl_util.c Index: modperl_util.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_util.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- modperl_util.c2001/03/13 05:09:02 1.4 +++ modperl_util.c2001/03/14 04:22:51 1.5 @@ -81,3 +81,8 @@ return status; } + +char *modperl_server_desc(server_rec *s, apr_pool_t *p) +{ +return apr_psprintf(p, "%s:%u", s-server_hostname, s-port); +} 1.5 +2 -0 modperl-2.0/src/modules/perl/modperl_util.h Index: modperl_util.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_util.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- modperl_util.h2001/03/09 23:46:36 1.4 +++ modperl_util.h2001/03/14 04:22:51 1.5 @@ -20,4 +20,6 @@ int modperl_require_module(pTHX_ const char *pv); +char *modperl_server_desc(server_rec *s, apr_pool_t *p); + #endif /* MODPERL_UTIL_H */
cvs commit: modperl-2.0/src/modules/perl mod_perl.c mod_perl.h modperl_callback.c modperl_callback.h modperl_config.c modperl_config.h modperl_filter.c modperl_interp.c modperl_types.h modperl_util.c modperl_util.h
dougm 01/03/09 15:46:38 Modified:lib/ModPerl Code.pm src/modules/perl mod_perl.c mod_perl.h modperl_callback.c modperl_callback.h modperl_config.c modperl_config.h modperl_filter.c modperl_interp.c modperl_types.h modperl_util.c modperl_util.h Log: remove use of Perl structures in modperl_handler_t, as they are not usable in a threaded environment. replace with pre-hashed mgv structures for fast lookup Revision ChangesPath 1.42 +3 -3 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.41 retrieving revision 1.42 diff -u -r1.41 -r1.42 --- Code.pm 2001/02/22 03:49:22 1.41 +++ Code.pm 2001/03/09 23:46:33 1.42 @@ -87,10 +87,10 @@ #XXX: allow disabling of PerDir hooks on a PerDir basis my @hook_flags = (map { canon_uc($_) } keys %hooks); my %flags = ( -Srv = [qw(NONE CLONE PARENT ENABLED), @hook_flags, 'UNSET'], +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)], +Handler = [qw(NONE PARSED METHOD OBJECT ANON AUTOLOAD)], ); my %flags_lookup = map { $_,1 } qw(Srv Dir); @@ -453,7 +453,7 @@ ); my @c_src_names = qw(interp tipool log config options callback gtop - util filter); + util filter mgv pcw); my @g_c_names = map { "modperl_$_" } qw(hooks directives flags xsinit); my @c_names = ('mod_perl', (map "modperl_$_", @c_src_names)); sub c_files { [map { "$_.c" } @c_names, @g_c_names] } 1.29 +22 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- mod_perl.c2001/02/04 22:19:11 1.28 +++ mod_perl.c2001/03/09 23:46:34 1.29 @@ -115,6 +115,24 @@ } } +#ifdef USE_ITHREADS +static void modperl_init_clones(server_rec *s, apr_pool_t *p) +{ +for (; s; s=s-next) { +MP_dSCFG(s); +if (scfg-mip-tipool-idle) { +MP_TRACE_i(MP_FUNC, "%s interp already cloned\n", + s-server_hostname); +} +else { +MP_TRACE_i(MP_FUNC, "cloning interp for %s\n", + s-server_hostname); +modperl_tipool_init(scfg-mip-tipool); +} +} +} +#endif + void modperl_hook_init(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) { @@ -139,6 +157,10 @@ ap_add_version_component(pconf, MP_VERSION_STRING); ap_add_version_component(pconf, Perl_form(aTHX_ "Perl/v%vd", PL_patchlevel)); +modperl_mgv_hash_handlers(pconf, s); +#ifdef USE_ITHREADS +modperl_init_clones(s, pconf); +#endif } void modperl_register_hooks(apr_pool_t *p) 1.26 +2 -0 modperl-2.0/src/modules/perl/mod_perl.h Index: mod_perl.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.h,v retrieving revision 1.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- mod_perl.h2001/01/21 23:19:03 1.25 +++ mod_perl.h2001/03/09 23:46:34 1.26 @@ -23,6 +23,8 @@ #include "modperl_options.h" #include "modperl_directives.h" #include "modperl_filter.h" +#include "modperl_pcw.h" +#include "modperl_mgv.h" void modperl_init(server_rec *s, apr_pool_t *p); void modperl_hook_init(apr_pool_t *pconf, apr_pool_t *plog, 1.21 +55 -251 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.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- modperl_callback.c2001/03/04 18:41:33 1.20 +++ modperl_callback.c2001/03/09 23:46:35 1.21 @@ -1,41 +1,23 @@ #include "mod_perl.h" -static void require_module(pTHX_ const char *pv) +modperl_handler_t *modperl_handler_new(apr_pool_t *p, const char *name) { -SV* sv; -dSP; -PUSHSTACKi(PERLSI_REQUIRE); -PUTBACK; -sv = sv_newmortal(); -sv_setpv(sv, "require "); -sv_catpv(sv, pv); -eval_sv(sv, G_DISCARD); -SPAGAIN; -POPSTACK; -} - -modperl_handler_t
cvs commit: modperl-2.0/src/modules/perl mod_perl.c mod_perl.h modperl_callback.c modperl_callback.h modperl_config.c
dougm 00/08/20 20:01:31 Modified:lib/Apache Build.pm lib/ModPerl Code.pm pod modperl_dev.pod src/modules/perl mod_perl.c mod_perl.h modperl_callback.c modperl_callback.h modperl_config.c Log: pass arguments to callbacks add PerlResponseHandler Revision ChangesPath 1.22 +1 -1 modperl-2.0/lib/Apache/Build.pm Index: Build.pm === RCS file: /home/cvs/modperl-2.0/lib/Apache/Build.pm,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- Build.pm 2000/06/20 16:04:21 1.21 +++ Build.pm 2000/08/21 03:01:27 1.22 @@ -104,7 +104,7 @@ if ($self-{MP_DEBUG}) { $self-{MP_TRACE} = 1; -$ccopts .= " -g"; +$ccopts .= " -g -DMP_DEBUG"; } if ($self-{MP_CCOPTS}) { 1.34 +7 -3 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.33 retrieving revision 1.34 diff -u -r1.33 -r1.34 --- Code.pm 2000/08/14 03:10:44 1.33 +++ Code.pm 2000/08/21 03:01:28 1.34 @@ -13,13 +13,15 @@ PerSrv = [qw(PostReadRequest Trans)], #Init PerDir = [qw(HeaderParser Access Authen Authz - Type Fixup Log)], #Init Response Cleanup + Type Fixup Response Log)], #Init Cleanup Connection = [qw(PreConnection ProcessConnection)], ); my %hooks = map { $_, canon_lc($_) } map { @{ $handlers{$_} } } keys %handlers; +my %not_ap_hook = map { $_, 1 } qw(response); + my %hook_proto = ( Process= { ret = 'void', @@ -165,7 +167,8 @@ if (my $hook = $hooks{$handler}) { push @register_hooks, - "ap_hook_$hook($name, NULL, NULL, AP_HOOK_LAST);"; + "ap_hook_$hook($name, NULL, NULL, AP_HOOK_LAST);" +unless $not_ap_hook{$hook}; } my($protostr, $pass) = canon_proto($prototype, $name); @@ -439,7 +442,8 @@ generate_trace = {h = 'modperl_trace.h'}, ); -my @c_src_names = qw(interp tipool log config options callback gtop); +my @c_src_names = qw(interp tipool log config options callback gtop + util apache_xs); my @g_c_names = map { "modperl_$_" } qw(hooks directives flags xsinit); my @c_names = ('mod_perl', (map "modperl_$_", @c_src_names)); sub c_files { [map { "$_.c" } @c_names, @g_c_names] } 1.5 +2 -0 modperl-2.0/pod/modperl_dev.pod Index: modperl_dev.pod === RCS file: /home/cvs/modperl-2.0/pod/modperl_dev.pod,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- modperl_dev.pod 2000/06/20 16:04:33 1.4 +++ modperl_dev.pod 2000/08/21 03:01:29 1.5 @@ -114,6 +114,8 @@ =item PerlFixupHandler +=item PerlResponseHandler + =item PerlLogHandler =item PerlPostReadRequestHandler 1.21 +5 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- mod_perl.c2000/08/14 03:10:45 1.20 +++ mod_perl.c2000/08/21 03:01:30 1.21 @@ -153,6 +153,11 @@ }; static handler_rec modperl_handlers[] = { +#if 0 +{ "perl-script", modperl_1xx_response_handler }, +#endif +/* this response handler does not do any extra crap */ +{ "modperl", modperl_response_handler }, { NULL }, }; 1.19 +4 -0 modperl-2.0/src/modules/perl/mod_perl.h Index: mod_perl.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.h,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- mod_perl.h2000/08/14 03:10:45 1.18 +++ mod_perl.h2000/08/21 03:01:30 1.19 @@ -24,6 +24,9 @@ #include "apr_lock.h" #include "apr_strings.h" +#include "ap_buckets.h" +#include "util_filter.h" + extern module MODULE_VAR_EXPORT perl_module; #include "modperl_flags.h" @@ -33,6 +36,7 @@ #include "modperl_gtop.h" #endif #include "modperl_types.h" +#include "modperl_util.h" #include "modperl_config.h" #include "modperl_callback.h" #include "modperl_tipool.h" 1.14 +89 -11modperl-2.0/src/modules/perl/modperl_callback.c Index: modperl_callback.c
cvs commit: modperl-2.0/src/modules/perl mod_perl.c mod_perl.h modperl_callback.c modperl_callback.h modperl_config.c modperl_config.h modperl_gtop.c modperl_gtop.h modperl_interp.c modperl_interp.h modperl_options.c modperl_options.h modperl_tipool.c modperl_tipool.h modperl_types.h
dougm 00/08/13 20:10:48 Modified:lib/ModPerl Code.pm src/modules/perl mod_perl.c mod_perl.h modperl_callback.c modperl_callback.h modperl_config.c modperl_config.h modperl_gtop.c modperl_gtop.h modperl_interp.c modperl_interp.h modperl_options.c modperl_options.h modperl_tipool.c modperl_tipool.h modperl_types.h Log: adjust to apr_ prefix Revision ChangesPath 1.33 +10 -10modperl-2.0/lib/ModPerl/Code.pm Index: Code.pm === RCS file: /home/cvs/modperl-2.0/lib/ModPerl/Code.pm,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- Code.pm 2000/06/20 16:04:28 1.32 +++ Code.pm 2000/08/14 03:10:44 1.33 @@ -23,14 +23,14 @@ my %hook_proto = ( Process= { ret = 'void', -args = [{type = 'ap_pool_t', name = 'p'}, +args = [{type = 'apr_pool_t', name = 'p'}, {type = 'server_rec', name = 's'}], }, Files = { ret = 'void', -args = [{type = 'ap_pool_t', name = 'pconf'}, - {type = 'ap_pool_t', name = 'plog'}, - {type = 'ap_pool_t', name = 'ptemp'}, +args = [{type = 'apr_pool_t', name = 'pconf'}, + {type = 'apr_pool_t', name = 'plog'}, + {type = 'apr_pool_t', name = 'ptemp'}, {type = 'server_rec', name = 's'}], }, PerSrv = { @@ -227,14 +227,14 @@ { $prototype-{cfg}-{get}; if (!MpSrvENABLED(scfg)) { -return ap_pstrcat(parms-pool, - "Perl is disabled for server ", - parms-server-server_hostname, NULL); +return apr_pstrcat(parms-pool, + "Perl is disabled for server ", + parms-server-server_hostname, NULL); } if (!$flag(scfg)) { -return ap_pstrcat(parms-pool, - "$h_name is disabled for server ", - parms-server-server_hostname, NULL); +return apr_pstrcat(parms-pool, + "$h_name is disabled for server ", + parms-server-server_hostname, NULL); } MP_TRACE_d(MP_FUNC, "push \@%s, %s\\n", parms-cmd-name, arg); return modperl_cmd_push_handlers(($av), arg, parms-pool); 1.20 +6 -6 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- mod_perl.c2000/06/14 16:07:06 1.19 +++ mod_perl.c2000/08/14 03:10:45 1.20 @@ -1,6 +1,6 @@ #include "mod_perl.h" -PerlInterpreter *modperl_startup(server_rec *s, ap_pool_t *p) +PerlInterpreter *modperl_startup(server_rec *s, apr_pool_t *p) { MP_dSCFG(s); PerlInterpreter *perl; @@ -42,7 +42,7 @@ return perl; } -void modperl_init(server_rec *base_server, ap_pool_t *p) +void modperl_init(server_rec *base_server, apr_pool_t *p) { server_rec *s; modperl_srv_config_t *base_scfg = @@ -112,14 +112,14 @@ } } -void modperl_hook_init(ap_pool_t *pconf, ap_pool_t *plog, - ap_pool_t *ptemp, server_rec *s) +void modperl_hook_init(apr_pool_t *pconf, apr_pool_t *plog, + apr_pool_t *ptemp, server_rec *s) { modperl_init(s, pconf); } -void modperl_pre_config_handler(ap_pool_t *p, ap_pool_t *plog, -ap_pool_t *ptemp) +void modperl_pre_config_handler(apr_pool_t *p, apr_pool_t *plog, +apr_pool_t *ptemp) { } 1.18 +6 -6 modperl-2.0/src/modules/perl/mod_perl.h Index: mod_perl.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.h,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- mod_perl.h2000/07/26 07:20:39 1.17 +++ mod_perl.h2000/08/14 03:10:45 1.18 @@ -41,13 +41,13 @@ #include "modperl_options.h" #include "modperl_directives.h" -void modperl_init(server_rec *s, ap_pool_t *p); -void modperl_hook_init(ap_pool_t *pconf, ap_pool_t *plog, - ap_pool_t *ptemp, server_rec *s); -void modperl_pre_config_handler(ap_pool_t *p, ap_pool_t *plog, -ap_pool_t *ptemp); +void modperl_init(server_rec *s, apr_pool_t *p); +void modperl_hook_init(apr_pool_t *pconf, apr_pool_t *plog, +
cvs commit: modperl-2.0/src/modules/perl mod_perl.c mod_perl.h modperl_callback.c modperl_config.c modperl_config.h modperl_types.h
dougm 00/06/13 14:05:55 Modified:lib/ModPerl Code.pm pod modperl_dev.pod src/modules/perl mod_perl.c mod_perl.h modperl_callback.c modperl_config.c modperl_config.h modperl_types.h Log: first cut of PerlOptions directive Revision ChangesPath 1.30 +46 -15modperl-2.0/lib/ModPerl/Code.pm Index: Code.pm === RCS file: /home/cvs/modperl-2.0/lib/ModPerl/Code.pm,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- Code.pm 2000/06/12 19:37:25 1.29 +++ Code.pm 2000/06/13 21:05:35 1.30 @@ -81,15 +81,17 @@ $directive_proto{$k}-{ret} = 'const char *'; } +#XXX: allow disabling of PerDir hooks on a PerDir basis +my @hook_flags = (map { canon_uc($_) } keys %hooks); my %flags = ( -Srv = [qw(NONE PERL_TAINT_CHECK PERL_WARN FRESH_RESTART - PERL_CLONE PERL_ALLOC PERL_OFF UNSET)], -Dir = [qw(NONE INCPUSH SENDHDR SENTHDR ENV CLEANUP RCLEANUP)], +Srv = [qw(NONE CLONE PARENT ENABLED), @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)], ); -my %flags_lookup = map { $_,1 } qw(Srv); +my %flags_lookup = map { $_,1 } qw(Srv Dir); +my %flags_options = map { $_,1 } qw(Srv); sub new { my $class = shift; @@ -201,10 +203,11 @@ my $i = 0; for my $h (@$handlers) { +my $h_name = join $h, qw(Perl Handler); my $name = canon_func('cmd', $h, 'handlers'); my $cmd_name = canon_define('cmd', $h, 'entry'); my $protostr = canon_proto($prototype, $name); - +my $flag = 'MpSrv' . canon_uc($h); my $ix = $self-{handler_index}-{$class}-[$i++]; my $av = "$prototype-{cfg}-{name}-handlers[$ix]"; @@ -215,7 +218,7 @@ print $h_fh EOF; #define $cmd_name \\ -{"Perl${h}Handler", $name, NULL, \\ +{"$h_name", $name, NULL, \\ $prototype-{scope}, ITERATE, "Subroutine name"} EOF @@ -223,11 +226,16 @@ $protostr { $prototype-{cfg}-{get}; -if (MpSrvPERL_OFF(scfg)) { +if (!MpSrvENABLED(scfg)) { return ap_pstrcat(parms-pool, "Perl is disabled for server ", parms-server-server_hostname, NULL); } +if (!$flag(scfg)) { +return ap_pstrcat(parms-pool, + "$h_name is disabled for server ", + parms-server-server_hostname, NULL); +} MP_TRACE_d(MP_FUNC, "push \@%s, %s\\n", parms-cmd-name, arg); return modperl_cmd_push_handlers(($av), arg, parms-pool); } @@ -243,24 +251,34 @@ sub generate_flags { my($self, $h_fh, $c_fh) = @_; +my $n = 1; + while (my($class, $opts) = each %{ $self-{flags} }) { my $i = 0; my @lookup = (); my $lookup_proto = ""; +my @dumper; if ($flags_lookup{$class}) { $lookup_proto = join canon_func('flags', 'lookup', $class), - 'int ', '(const char *str)'; + 'U32 ', '(const char *str)'; push @lookup, "$lookup_proto {"; } + +my $flags = join $class, qw(Mp FLAGS); -print $h_fh "\n#define Mp${class}FLAGS(p) p-flags\n"; +print $h_fh "\n#define $flags(p) ", + ($flags_options{$class} ? '(p)-flags-opts' : '(p)-flags'), "\n"; + $class = "Mp$class"; +print $h_fh "\n#define ${class}Type $n\n"; +$n++; for my $f (@$opts) { my $flag = "${class}_f_$f"; my $cmd = $class . $f; +my $name = canon_name($f); + if (@lookup) { -my $name = canon_name($f); push @lookup, qq( if (strEQ(str, "$name")) return $flag;); } @@ -268,19 +286,32 @@ /* $f */ #define $flag $i -#define $cmd(p) ((p)-flags $flag) -#define ${cmd}_On(p) ((p)-flags |= $flag) -#define ${cmd}_Off(p) ((p)-flags = ~$flag) +#define $cmd(p) ($flags(p) $flag) +#define ${cmd}_On(p) ($flags(p) |= $flag) +#define ${cmd}_Off(p) ($flags(p) = ~$flag) EOF +push @dumper, + qq{fprintf(stderr, " $name %s\\n", \\ + ($flags(p) $i) ? "On " : "Off");}; + $i += $i || 1; } if (@lookup) { -print $c_fh join "\n", @lookup, " return -1;\n}\n"; +print $c_fh join "\n", @lookup, " return 0;\n}\n"; print $h_fh "$lookup_proto;\n"; } + +shift @dumper; #NONE +print $h_fh join ' \\'."\n", +
cvs commit: modperl-2.0/src/modules/perl mod_perl.c
dougm 00/06/12 11:20:55 Modified:src/modules/perl mod_perl.c Log: make sure vhost config points to a mip Revision ChangesPath 1.16 +23 -16modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- mod_perl.c2000/06/12 03:30:51 1.15 +++ mod_perl.c2000/06/12 18:20:55 1.16 @@ -42,39 +42,38 @@ return perl; } -void modperl_init(server_rec *s, ap_pool_t *p) +void modperl_init(server_rec *base_server, ap_pool_t *p) { -server_rec *base_server = s; -server_rec *srvp; +server_rec *s; +modperl_srv_config_t *base_scfg = + (modperl_srv_config_t *) +ap_get_module_config(base_server-module_config, perl_module); PerlInterpreter *base_perl = modperl_startup(base_server, p); -modperl_interp_init(base_server, p, base_perl); -{ -MP_dSCFG(base_server); -MpInterpBASE_On(scfg-mip-parent); -} +modperl_interp_init(base_server, p, base_perl); +MpInterpBASE_On(base_scfg-mip-parent); -for (srvp=base_server-next; srvp; srvp=srvp-next) { -MP_dSCFG(srvp); +for (s=base_server-next; s; s=s-next) { +MP_dSCFG(s); PerlInterpreter *perl = base_perl; if (1) { /* XXX: using getenv() just for testing here */ char *do_alloc = getenv("MP_SRV_ALLOC_TEST"); char *do_clone = getenv("MP_SRV_CLONE_TEST"); -if (do_alloc strEQ(do_alloc, srvp-server_hostname)) { +if (do_alloc strEQ(do_alloc, s-server_hostname)) { MpSrvPERL_ALLOC_On(scfg); } -if (do_clone strEQ(do_clone, srvp-server_hostname)) { +if (do_clone strEQ(do_clone, s-server_hostname)) { MpSrvPERL_CLONE_On(scfg); } } /* if alloc flags is On, virtual host gets its own parent perl */ if (MpSrvPERL_ALLOC(scfg)) { -perl = modperl_startup(srvp, p); +perl = modperl_startup(s, p); MP_TRACE_i(MP_FUNC, "modperl_startup() server=%s\n", - srvp-server_hostname); + s-server_hostname); } #ifdef USE_ITHREADS @@ -83,13 +82,21 @@ */ if (MpSrvPERL_ALLOC(scfg) || MpSrvPERL_CLONE(scfg)) { MP_TRACE_i(MP_FUNC, "modperl_interp_init() server=%s\n", - srvp-server_hostname); -modperl_interp_init(srvp, p, perl); + s-server_hostname); +modperl_interp_init(s, p, perl); } /* if we allocated a parent perl, mark it to be destroyed */ if (MpSrvPERL_ALLOC(scfg)) { MpInterpBASE_On(scfg-mip-parent); +} + +if (!scfg-mip) { +/* since mips are created after merge_server_configs() + * need to point to the base mip here if this vhost + * doesn't have its own + */ +scfg-mip = base_scfg-mip; } #endif }
cvs commit: modperl-2.0/src/modules/perl mod_perl.c mod_perl.h modperl_config.c modperl_config.h modperl_interp.c modperl_types.h
dougm 00/05/23 13:54:47 Modified:lib/ModPerl Code.pm src/modules/perl mod_perl.c mod_perl.h modperl_config.c modperl_config.h modperl_interp.c modperl_types.h Log: integrate with tipool implement PerlInterpMaxRequests Revision ChangesPath 1.25 +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.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- Code.pm 2000/04/30 18:36:51 1.24 +++ Code.pm 2000/05/23 20:54:42 1.25 @@ -377,7 +377,7 @@ generate_trace = {h = 'modperl_trace.h'}, ); -my @c_src_names = qw(interp log config callback gtop); +my @c_src_names = qw(interp tipool log config callback gtop); my @g_c_names = map { "modperl_$_" } qw(hooks directives xsinit); my @c_names = ('mod_perl', (map "modperl_$_", @c_src_names)); sub c_files { [map { "$_.c" } @c_names, @g_c_names] } 1.14 +2 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- mod_perl.c2000/04/29 02:37:36 1.13 +++ mod_perl.c2000/05/23 20:54:44 1.14 @@ -79,6 +79,8 @@ "Max number of spare Perl interpreters"), MP_SRV_CMD_TAKE1("PerlInterpMinSpare", interp_min_spare, "Min number of spare Perl interpreters"), +MP_SRV_CMD_TAKE1("PerlInterpMaxRequests", interp_max_requests, + "Max number of requests per Perl interpreters"), #endif MP_CMD_ENTRIES, { NULL }, 1.14 +1 -0 modperl-2.0/src/modules/perl/mod_perl.h Index: mod_perl.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.h,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- mod_perl.h2000/04/28 20:07:34 1.13 +++ mod_perl.h2000/05/23 20:54:44 1.14 @@ -34,6 +34,7 @@ #include "modperl_types.h" #include "modperl_config.h" #include "modperl_callback.h" +#include "modperl_tipool.h" #include "modperl_interp.h" #include "modperl_log.h" 1.10 +3 -2 modperl-2.0/src/modules/perl/modperl_config.c Index: modperl_config.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_config.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- modperl_config.c 2000/04/27 21:42:25 1.9 +++ modperl_config.c 2000/05/23 20:54:44 1.10 @@ -119,7 +119,7 @@ #ifdef USE_ITHREADS scfg-interp_pool_cfg = -(modperl_interp_pool_config_t *) +(modperl_tipool_config_t *) ap_pcalloc(p, sizeof(*scfg-interp_pool_cfg)); /* XXX: determine reasonable defaults */ @@ -127,7 +127,7 @@ scfg-interp_pool_cfg-max_spare = 3; scfg-interp_pool_cfg-min_spare = 3; scfg-interp_pool_cfg-max = 5; - +scfg-interp_pool_cfg-max_requests = 2000; #endif /* USE_ITHREADS */ return scfg; @@ -198,5 +198,6 @@ MP_IMP_INTERP_POOL_CFG(max); MP_IMP_INTERP_POOL_CFG(max_spare); MP_IMP_INTERP_POOL_CFG(min_spare); +MP_IMP_INTERP_POOL_CFG(max_requests); #endif /* USE_ITHREADS */ 1.10 +1 -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.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- modperl_config.h 2000/04/27 21:42:25 1.9 +++ modperl_config.h 2000/05/23 20:54:44 1.10 @@ -30,6 +30,7 @@ MP_DECLARE_SRV_CMD(interp_max); MP_DECLARE_SRV_CMD(interp_max_spare); MP_DECLARE_SRV_CMD(interp_min_spare); +MP_DECLARE_SRV_CMD(interp_max_requests); #endif #define MP_SRV_CMD_TAKE1(name, item, desc) \ 1.12 +38 -231 modperl-2.0/src/modules/perl/modperl_interp.c Index: modperl_interp.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_interp.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- modperl_interp.c 2000/05/01 23:29:04 1.11 +++ modperl_interp.c 2000/05/23 20:54:44 1.12 @@ -7,120 +7,6 @@ #ifdef USE_ITHREADS -modperl_list_t *modperl_list_new(ap_pool_t *p) -{ -modperl_list_t *listp = -(modperl_list_t *)ap_pcalloc(p, sizeof(*listp)); -return
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_callback.h modperl_config.c modperl_config.h modperl_log.c modperl_types.h
dougm 00/04/18 15:59:15 Modified:lib/ModPerl Code.pm src/modules/perl mod_perl.c modperl_callback.h modperl_config.c modperl_config.h modperl_log.c modperl_types.h Log: integrate with modperl_callback.c beef up tracing support Revision ChangesPath 1.12 +43 -9 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.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- Code.pm 2000/04/17 21:11:06 1.11 +++ Code.pm 2000/04/18 22:59:13 1.12 @@ -49,12 +49,14 @@ {type = 'char', name = 'arg'}], cfg = {get = 'MP_dSCFG(parms-server)', name = 'scfg'}, +scope = 'RSRC_CONF', }, PerDir = { args = [{type = 'cmd_parms', name = 'parms'}, {type = 'modperl_dir_config_t', name = 'dcfg'}, {type = 'char', name = 'arg'}], cfg = {get = '', name = 'dcfg'}, +scope = 'OR_ALL', }, ); @@ -70,7 +72,7 @@ Srv = [qw(NONE PERL_TAINT_CHECK PERL_WARN FRESH_RESTART)], Dir = [qw(NONE INCPUSH SENDHDR SENTHDR ENV CLEANUP RCLEANUP)], Interp = [qw(NONE IN_USE PUTBACK CLONED)], -Handler = [qw(NONE METHOD)], +Handler = [qw(NONE PARSED METHOD OBJECT ANON)], ); sub new { @@ -141,17 +143,27 @@ for my $h (@$handlers) { my $name = canon_func('cmd', $h, 'handlers'); +my $cmd_name = canon_define('cmd', $h, 'entry'); my $protostr = canon_proto($prototype, $name); my $ix = $self-{handler_index}-{$class}-[$i++]; my $av = "$prototype-{cfg}-{name}-handlers[$ix]"; print $h_fh "$protostr;\n"; + +print $h_fh EOF; + +#define $cmd_name \\ +{"Perl${h}Handler", $name, NULL, \\ + $prototype-{scope}, ITERATE, "Subroutine name"} + +EOF print $c_fh EOF; $protostr { $prototype-{cfg}-{get}; -return modperl_cmd_push_handlers($av, arg, parms-pool); +MP_TRACE_d(MP_FUNC, "push \@%s, %s\n", parms-cmd-name, arg); +return modperl_cmd_push_handlers(($av), arg, parms-pool); } EOF } @@ -185,22 +197,34 @@ } } -my @trace = qw(d s h g c i m); +my %trace = ( +#'a' = 'all', +'d' = 'directive processing', +'s' = 'perl sections', +'h' = 'handlers', +'m' = 'memory allocations', +'i' = 'interpreter pool management', +'g' = 'Perl runtime interaction', +); sub generate_trace { my($self, $h_fh) = @_; my $i = 1; +my @trace = sort keys %trace; my $opts = join '', @trace; +my $tl = "MP_debug_level"; print $h_fh EOF; -extern U32 MP_debug_level; +extern U32 $tl; #define MP_TRACE_OPTS "$opts" #ifdef MP_TRACE -#define MP_TRACE_a if (MP_debug_level) modperl_trace -#define MP_TRACE_a_do(exp) if (MP_debug_level) exp +#define MP_TRACE_a if ($tl) modperl_trace +#define MP_TRACE_a_do(exp) if ($tl) { \\ +exp; \\ +} #else #define MP_TRACE_a if (0) modperl_trace #define MP_TRACE_a_do(exp) @@ -208,21 +232,31 @@ EOF +my @dumper; for my $type (@trace) { my $define = "#define MP_TRACE_$type"; my $define_do = join '_', $define, 'do'; print $h_fh EOF; #ifdef MP_TRACE -$define if (MP_debug_level $i) modperl_trace -$define_do(exp) if (MP_debug_level $i) exp +$define if ($tl $i) modperl_trace +$define_do(exp) if ($tl $i) { \\ +exp; \\ +} #else $define if (0) modperl_trace $define_do(exp) #endif EOF +push @dumper, + qq{fprintf(stderr, " $type %s ($trace{$type})\\n", ($tl $i) ? "On " : "Off");}; $i += $i; } + +print $h_fh join ' \\'."\n", + '#define MP_TRACE_dump_flags()', + qq{fprintf(stderr, "mod_perl trace flags dump:\\n");}, + @dumper; } sub ins_underscore { @@ -277,7 +311,7 @@ generate_trace = {h = 'modperl_trace.h'}, ); -my @c_src_names = qw(interp log config gtop); +my @c_src_names = qw(interp log config callback gtop); my @g_c_names = map { "modperl_$_" } qw(hooks directives xsinit); my @c_names = ('mod_perl', (map "modperl_$_", @c_src_names), @g_c_names); sub c_files { [map { "$_.c" } @c_names] } 1.9 +1 -0 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- mod_perl.c
cvs commit: modperl-2.0/src/modules/perl mod_perl.c mod_perl.h modperl_config.c modperl_config.h modperl_types.h
dougm 00/04/17 14:11:07 Modified:lib/ModPerl Code.pm src/modules/perl mod_perl.c mod_perl.h modperl_config.c modperl_config.h modperl_types.h Log: hook in xsinit add PerlSwitches directive Revision ChangesPath 1.11 +6 -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.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- Code.pm 2000/04/17 07:10:55 1.10 +++ Code.pm 2000/04/17 21:11:06 1.11 @@ -278,7 +278,7 @@ ); my @c_src_names = qw(interp log config gtop); -my @g_c_names = map { "modperl_$_" } qw(hooks directives); +my @g_c_names = map { "modperl_$_" } qw(hooks directives xsinit); my @c_names = ('mod_perl', (map "modperl_$_", @c_src_names), @g_c_names); sub c_files { [map { "$_.c" } @c_names] } sub o_files { [map { "$_.o" } @c_names] } @@ -360,6 +360,11 @@ } $self-postamble; + +my $xsinit = "$self-{path}/modperl_xsinit.c"; +warn "generating...$xsinit\n"; + +ExtUtils::Embed::xsinit($xsinit); } 1; 1.8 +8 -5 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- mod_perl.c2000/04/17 07:10:55 1.7 +++ mod_perl.c2000/04/17 21:11:06 1.8 @@ -2,13 +2,13 @@ void modperl_startup(server_rec *s, ap_pool_t *p) { +MP_dSCFG(s); PerlInterpreter *perl; int status; -char *argv[] = { "httpd", "/dev/null" }; -int argc = 2; +char **argv; +int argc; #ifdef MP_USE_GTOP -MP_dSCFG(s); MP_TRACE_m_do( scfg-gtop = modperl_gtop_new(p); modperl_gtop_do_proc_mem_before(MP_FUNC ": perl_parse"); @@ -21,8 +21,10 @@ } perl_construct(perl); - -status = perl_parse(perl, NULL, argc, argv, NULL); + +argv = modperl_srv_config_argv_init(scfg, argc); + +status = perl_parse(perl, xs_init, argc, argv, NULL); if (status) { perror("perl_parse"); @@ -63,6 +65,7 @@ } static command_rec modperl_cmds[] = { +MP_SRV_CMD_ITERATE("PerlSwitches", switches, "Perl Switches"), #ifdef MP_TRACE MP_SRV_CMD_TAKE1("PerlTrace", trace, "Trace level"), #endif 1.8 +1 -0 modperl-2.0/src/modules/perl/mod_perl.h Index: mod_perl.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- mod_perl.h2000/04/17 07:10:55 1.7 +++ mod_perl.h2000/04/17 21:11:06 1.8 @@ -38,5 +38,6 @@ #include "modperl_directives.h" void modperl_init(server_rec *s, ap_pool_t *p); +void xs_init(pTHXo); #endif /* MOD_PERL_H */ 1.5 +52 -1 modperl-2.0/src/modules/perl/modperl_config.c Index: modperl_config.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_config.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- modperl_config.c 2000/04/16 01:33:56 1.4 +++ modperl_config.c 2000/04/17 21:11:06 1.5 @@ -10,10 +10,42 @@ return NULL; } +#define scfg_push_argv(arg) \ +*(char **)ap_push_array(scfg-argv) = arg + modperl_srv_config_t *modperl_srv_config_new(ap_pool_t *p) { -return (modperl_srv_config_t *) +modperl_srv_config_t *scfg = (modperl_srv_config_t *) ap_pcalloc(p, sizeof(modperl_srv_config_t)); + +scfg-argv = ap_make_array(p, 2, sizeof(char *)); + +scfg_push_argv("httpd"); + +return scfg; +} + +#ifdef MP_TRACE +static void dump_argv(modperl_srv_config_t *scfg) +{ +int i; +char **argv = (char **)scfg-argv-elts; +fprintf(stderr, "modperl_srv_config_argv_init =\n"); +for (i=0; iscfg-argv-nelts; i++) { +fprintf(stderr, " %d = %s\n", i, argv[i]); +} +} +#endif + +char **modperl_srv_config_argv_init(modperl_srv_config_t *scfg, int *argc) +{ +scfg_push_argv("-e;0"); + +*argc = scfg-argv-nelts; + +MP_TRACE_g_do(dump_argv(scfg)); + +return (char **)scfg-argv-elts; } void *modperl_create_srv_config(ap_pool_t *p, server_rec *s) @@ -56,9 +88,28 @@ #define MP_CONFIG_BOOTSTRAP(parms) \ if (!scfg-mip) modperl_init(parms-server, parms-pool) +#define MP_SRV_CMD_TRACE \ +MP_TRACE_d(MP_FUNC, "%s %s\n", parms-cmd-name, arg) + +#define MP_SRV_CMD_CHECK \
cvs commit: modperl-2.0/src/modules/perl mod_perl.c modperl_config.c modperl_config.h modperl_interp.c modperl_interp.h modperl_types.h
dougm 00/04/15 18:33:57 Modified:src/modules/perl mod_perl.c modperl_config.c modperl_config.h modperl_interp.c modperl_interp.h modperl_types.h Log: interpreter pool is only useful #ifdef USE_ITHREADS Revision ChangesPath 1.6 +3 -6 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- mod_perl.c2000/04/16 00:35:32 1.5 +++ mod_perl.c2000/04/16 01:33:56 1.6 @@ -23,7 +23,7 @@ perl_run(perl); -modperl_interp_pool_init(s, p, perl); +modperl_interp_init(s, p, perl); } void modperl_init(server_rec *s, ap_pool_t *p) @@ -46,17 +46,13 @@ { /* XXX: should be pre_config hook or 1.xx logic */ ap_hook_open_logs(modperl_hook_init, NULL, NULL, HOOK_MIDDLE); - -/* XXX: should only bother selecting an interpreter - * if one is needed for the request - */ -ap_hook_post_read_request(modperl_interp_select, NULL, NULL, HOOK_FIRST); } static command_rec modperl_cmds[] = { #ifdef MP_TRACE MP_SRV_CMD_TAKE1("PerlTrace", trace, "Trace level"), #endif +#ifdef USE_ITHREADS MP_SRV_CMD_TAKE1("PerlInterpStart", interp_start, "Number of Perl interpreters to start"), MP_SRV_CMD_TAKE1("PerlInterpMax", interp_max, @@ -65,6 +61,7 @@ "Max number of spare Perl interpreters"), MP_SRV_CMD_TAKE1("PerlInterpMinSpare", interp_min_spare, "Min number of spare Perl interpreters"), +#endif { NULL }, }; 1.4 +11 -2 modperl-2.0/src/modules/perl/modperl_config.c Index: modperl_config.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_config.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- modperl_config.c 2000/04/16 00:53:33 1.3 +++ modperl_config.c 2000/04/16 01:33:56 1.4 @@ -19,6 +19,8 @@ void *modperl_create_srv_config(ap_pool_t *p, server_rec *s) { modperl_srv_config_t *scfg = modperl_srv_config_new(p); + +#ifdef USE_ITHREADS scfg-interp_pool_cfg = (modperl_interp_pool_config_t *) ap_pcalloc(p, sizeof(*scfg-interp_pool_cfg)); @@ -29,6 +31,8 @@ scfg-interp_pool_cfg-min_spare = 3; scfg-interp_pool_cfg-max = 5; +#endif /* USE_ITHREADS */ + return scfg; } @@ -37,14 +41,16 @@ void *modperl_merge_srv_config(ap_pool_t *p, void *basev, void *addv) { +#if 0 modperl_srv_config_t *base = (modperl_srv_config_t *)basev, *add = (modperl_srv_config_t *)addv, *mrg = modperl_srv_config_new(p); -merge_item(mip); - return mrg; +#else +return basev; +#endif } #define MP_CONFIG_BOOTSTRAP(parms) \ @@ -56,6 +62,7 @@ return NULL; } +#ifdef USE_ITHREADS #define MP_IMP_INTERP_POOL_CFG(item) \ const char *modperl_cmd_interp_##item(cmd_parms *parms, \ @@ -74,3 +81,5 @@ MP_IMP_INTERP_POOL_CFG(max); MP_IMP_INTERP_POOL_CFG(max_spare); MP_IMP_INTERP_POOL_CFG(min_spare); + +#endif /* USE_ITHREADS */ 1.5 +2 -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.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- modperl_config.h 2000/04/16 00:35:32 1.4 +++ modperl_config.h 2000/04/16 01:33:56 1.5 @@ -18,10 +18,12 @@ void *dummy, char *arg) MP_DECLARE_SRV_CMD(trace); +#ifdef USE_ITHREADS MP_DECLARE_SRV_CMD(interp_start); MP_DECLARE_SRV_CMD(interp_max); MP_DECLARE_SRV_CMD(interp_max_spare); MP_DECLARE_SRV_CMD(interp_min_spare); +#endif #define MP_SRV_CMD_TAKE1(name, item, desc) \ { name, modperl_cmd_##item, NULL, \ 1.6 +26 -4 modperl-2.0/src/modules/perl/modperl_interp.c Index: modperl_interp.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_interp.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- modperl_interp.c 2000/04/16 00:35:32 1.5 +++ modperl_interp.c 2000/04/16 01:33:56 1.6 @@ -5,6 +5,8 @@ * but it will do for proof-of-concept */ +#ifdef USE_ITHREADS + modperl_interp_t *modperl_interp_new(ap_pool_t *p, modperl_interp_pool_t *mip,