Re: [mp2] segfaulting apache in ap_pcw_walk_files_config

[prev] [thread] [next] [Date index for 2005/05/24]

From: Philippe M. Chiasson
Subject: Re: [mp2] segfaulting apache in ap_pcw_walk_files_config
Date: 06:22 on 24 May 2005
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enig745FB948DBCC06C593F27E63
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

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

--------------enig745FB948DBCC06C593F27E63
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (Darwin)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFCksgpyzKhB4jDpaURAysSAJ96CcaDbBZDWzfymwuLKsqxn3aG5gCfUsZF
iXBJJZajhA3sjPXTVfRv76k=
=GH/u
-----END PGP SIGNATURE-----

--------------enig745FB948DBCC06C593F27E63--

(message missing)

Re: [mp2] segfaulting apache in ap_pcw_walk_files_config
Philippe M. Chiasson 06:22 on 24 May 2005

Re: [mp2] segfaulting apache in ap_pcw_walk_files_config
Philippe M. Chiasson 04:52 on 25 May 2005

Re: [mp2] segfaulting apache in ap_pcw_walk_files_config
Philippe M. Chiasson 09:16 on 25 May 2005

Re: [mp2] segfaulting apache in ap_pcw_walk_files_config
Philippe M. Chiasson 09:23 on 26 May 2005

Generated at 20:12 on 05 Jun 2005 by mariachi v0.52