dougm 02/05/22 21:03:46 Modified: src/modules/perl mod_perl.c mod_perl.h Log: better fix for DynaLoader vs XSLoader workaround Revision Changes Path 1.144 +23 -1 modperl/src/modules/perl/mod_perl.c Index: mod_perl.c =================================================================== RCS file: /home/cvs/modperl/src/modules/perl/mod_perl.c,v retrieving revision 1.143 retrieving revision 1.144 diff -u -r1.143 -r1.144 --- mod_perl.c 24 Mar 2002 23:01:33 -0000 1.143 +++ mod_perl.c 23 May 2002 04:03:46 -0000 1.144 @@ -569,6 +569,28 @@ perl_startup(s, p); } +static void mod_perl_boot(void *data) +{ + /* make sure DynaLoader is loaded before XSLoader + * to workaround bug in 5.6.1 that can trigger a segv + * when using modperl as a dso + */ + perl_require_module("DynaLoader", NULL); +} + +static void mod_perl_xs_init(void) +{ + xs_init(); + + /* XXX: in 5.7.2+ we can call the body of mod_perl_boot here + * but in 5.6.1 the Perl runtime is not properly setup yet + * so we have to pull this stunt to delay + */ +#ifdef SAVEDESTRUCTOR_X + SAVEDESTRUCTOR_X(mod_perl_boot, 0); +#endif +} + void perl_startup (server_rec *s, pool *p) { char *argv[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL }; @@ -677,7 +699,7 @@ MP_TRACE_g(fprintf(stderr, "constructing perl interpreter...ok\n")); perl_construct(perl); - status = perl_parse(perl, xs_init, argc, argv, NULL); + status = perl_parse(perl, mod_perl_xs_init, argc, argv, NULL); if (status != OK) { MP_TRACE_g(fprintf(stderr,"not ok, status=%d\n", status)); perror("parse"); 1.115 +0 -1 modperl/src/modules/perl/mod_perl.h Index: mod_perl.h =================================================================== RCS file: /home/cvs/modperl/src/modules/perl/mod_perl.h,v retrieving revision 1.114 retrieving revision 1.115 diff -u -r1.114 -r1.115 --- mod_perl.h 23 May 2002 03:07:27 -0000 1.114 +++ mod_perl.h 23 May 2002 04:03:46 -0000 1.115 @@ -1192,7 +1192,6 @@ /* perl_config.c */ #define require_Apache(s) \ - perl_require_module("DynaLoader", s); \ perl_require_module("Apache", s) char *mod_perl_auth_name(request_rec *r, char *val);