perl-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Torsten Foertsch <torsten.foert...@gmx.net>
Subject Re: [PATCH]Re: segfault analysis
Date Mon, 07 May 2007 18:24:43 GMT
On Monday 07 May 2007 19:19, Philippe M. Chiasson wrote:
> Torsten Foertsch wrote:
> > On Sunday 06 May 2007 19:11, Torsten Foertsch wrote:
> >> [...]
> >
> > That happens if there is no handler configured at startup time but more
> > than one for the same phase at request time.
>
>          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) {
>
>
> Wouldn't something like:
>
> if (ravp && !*ravp) {
>
> }
>
> if (avp && !*avp) {
>
> }

I wanted to make it more understandable for the next one who reads the source.

ravp!=0 says: there is a rcfg, that means change that instead of avp
*ravp!=0 says: there are already handlers installed in rcfg

So an equal but shorter version would be

      case MP_HANDLER_ACTION_PUSH:
        if (ravp) {
            if (!*ravp) {
  	        /* initialize ravp either from avp or as an empty array */
                if (*avp) {
                    /* merge with existing configured handlers */
                    *ravp = apr_array_copy(p, *avp);
                }
                else {
                    /* no request handlers have been previously pushed or set 
*/
                    *ravp = modperl_handler_array_new(p);
                }
            }
        }
        else if (!*avp) {
            /* directly modify the configuration at startup time */
            *avp = modperl_handler_array_new(p);
        }
        break;

or

      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);
            }
            else {
                /* no request handlers have been previously pushed or set */
                *ravp = modperl_handler_array_new(p);
            }
        }
        else if (!ravp && !*avp) {
            /* directly modify the configuration at startup time */
            *avp = modperl_handler_array_new(p);
        }
        break;

The point is if ravp!=0 we must not change *avp.

Torsten

Mime
View raw message