On Sunday 06 May 2007 19:11, Torsten Foertsch wrote:
> I am in the middle of the analysis of a segfault. The segfault happens in a
> $r->push_handlers(PerlFixupHandler=>sub{}). Unfortunately it happens not
> for every request but after 13. Finally, I think I have tracked it down to
> something to talk about.The attached patch fixes that. The problem was that with an already initialized rcfg (ravp && *ravp == true) but no handler configured in dcfg a pointer allocated from r->pool was saved in dcfg. That happens if there is no handler configured at startup time but more than one for the same phase at request time. Torsten
Index: src/modules/perl/modperl_handler.c
===================================================================
--- src/modules/perl/modperl_handler.c (revision 535867)
+++ src/modules/perl/modperl_handler.c (working copy)
@@ -428,6 +428,7 @@
break;
case MP_HANDLER_ACTION_PUSH:
if (ravp && !*ravp) {
+ /* initialize ravp either from avp or as an empty array */
if (*avp) {
/* merge with existing configured handlers */
*ravp = apr_array_copy(p, *avp);
@@ -437,6 +438,9 @@
*ravp = modperl_handler_array_new(p);
}
}
+ else if (ravp /* && *ravp */) {
+ /* ravp is already initialized: do nothing */
+ }
else if (!*avp) {
/* directly modify the configuration at startup time */
*avp = modperl_handler_array_new(p);
pgpq7nJ8vfF0M.pgp
Description: PGP signature
