Flavio Curti wrote: > Hello > > I have a problem running mod_perl-2.0.0 (and the latest devel snapshot too): > > Apache segfaults on startup as soon as I have the LoadModule directive > in the httpd.conf. This also happens when running make test. I have > compiled mod_perl with debugging enabled and found the problematic > spot, however I have no idea on what exactly is wrong: > > (gdb output after segfault): > > [Mon May 23 17:10:32 2005] [info] 6 Apache2:: modules loaded > [Mon May 23 17:10:32 2005] [info] 0 APR:: modules loaded > [Mon May 23 17:10:32 2005] [info] base server + 27 vhosts ready to run tests > > Program received signal SIGSEGV, Segmentation fault. > [Switching to Thread -1212529568 (LWP 11107)] > 0xb75a86dc in ap_pcw_walk_files_config (pconf=0x80c20a8, s=0x80c8018, > dconf=0x80fe4a8, modp=0xb75bb500, > dir_cb=0xb75a82d0 <modperl_hash_handlers_dir>, data=0x0) > at modperl_pcw.c:67 > 67 ap_conf_vector_t **dirs = (ap_conf_vector_t > **)dconf->sec_file->elts; > (gdb) bt > #0 0xb75a86dc in ap_pcw_walk_files_config (pconf=0x80c20a8, s=0x80c8018, > dconf=0x80fe4a8, modp=0xb75bb500, > dir_cb=0xb75a82d0 <modperl_hash_handlers_dir>, data=0x0) > at modperl_pcw.c:67 [...] > #5 0x08087d7e in main () > (gdb)
It would be quite helpfull if you could just get me:
(gdb) print *dconf
(gdb) print *(dconf->sec_file)
Until I can figure out how to reproduce this.
> In order to isolate the problem further I changed line 118 of modperl_pcw.c
> from
> if (dir_cb) {
> to
> if (dir_cb && 0) {
>
> and mod-perl2 started working! So there seems to be a problem with
> reading configuration files/directories somehow.
Do you mean that the test suite passed _all_ it's tests or that the server
simply started up ? Because that patch would disable quite a few important
things.
Can you also try this patch ?
Index: src/modules/perl/modperl_pcw.c
===================================================================
--- src/modules/perl/modperl_pcw.c (revision 171298)
+++ src/modules/perl/modperl_pcw.c (working copy)
@@ -26,8 +26,13 @@
ap_pcw_dir_cb_t dir_cb, void *data)
{
int i;
- ap_conf_vector_t **urls = (ap_conf_vector_t **)sconf->sec_url->elts;
+ ap_conf_vector_t **urls;
+ if (!sconf->sec_url) {
+ return;
+ }
+
+ urls = (ap_conf_vector_t **)sconf->sec_url->elts;
for (i = 0; i < sconf->sec_url->nelts; i++) {
core_dir_config *conf =
ap_get_module_config(urls[i], &core_module);
@@ -45,8 +50,13 @@
ap_pcw_dir_cb_t dir_cb, void *data)
{
int i;
- ap_conf_vector_t **dirs = (ap_conf_vector_t **)sconf->sec_dir->elts;
+ ap_conf_vector_t **dirs;
+ if (!sconf->sec_dir) {
+ return;
+ }
+
+ dirs = (ap_conf_vector_t **)sconf->sec_dir->elts;
for (i = 0; i < sconf->sec_dir->nelts; i++) {
core_dir_config *conf =
ap_get_module_config(dirs[i], &core_module);
@@ -64,9 +74,15 @@
ap_pcw_dir_cb_t dir_cb, void *data)
{
int i;
- ap_conf_vector_t **dirs = (ap_conf_vector_t **)dconf->sec_file->elts;
+ ap_conf_vector_t **dirs;
- for (i = 0; i < dconf->sec_file->nelts; i++) {
+ if (!dconf->sec_file) {
+ return;
+ }
+
+ dirs = (ap_conf_vector_t **)dconf->sec_file->elts;
+
+ for (i = 0; i < dconf->sec_file->nelts; i++) {
core_dir_config *conf =
ap_get_module_config(dirs[i], &core_module);
void *dir_cfg = ap_get_module_config(dirs[i], modp);
--------------------------------------------------------------------------------
Philippe M. Chiasson m/gozer\@(apache|cpan|ectoplasm)\.org/ GPG KeyID : 88C3A5A5
http://gozer.ectoplasm.org/ F9BF E0C2 480E 7680 1AE5 3631 CB32 A107 88C3A5A5
signature.asc
Description: OpenPGP digital signature
