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,