--- 1.x/src/modules/perl/mod_perl.h 2007/07/13 08:17:02 555907 +++ 1.x/src/modules/perl/mod_perl.h 2007/07/13 08:21:11 555908 @@ -301,6 +301,13 @@ #define av_copy_array(av) av_make(av_len(av)+1, AvARRAY(av)) +#define MP_safe_av_undef(av) \ +if (av != Nullav) { \ + av_undef(av); \ + SvREFCNT_dec((SV*)av); \ + av = Nullav; \ +} + #ifndef newRV_noinc #define newRV_noinc(sv) ((Sv = newRV(sv)), --SvREFCNT(SvRV(Sv)), Sv) #endif --- 1.x/src/modules/perl/mod_perl.c 2007/07/13 08:17:02 555907 +++ 1.x/src/modules/perl/mod_perl.c 2007/07/13 08:21:11 555908 @@ -277,13 +277,8 @@ mp_request_rec = 0; - av_undef(orig_inc); - SvREFCNT_dec((SV*)orig_inc); - orig_inc = Nullav; - - av_undef(cleanup_av); - SvREFCNT_dec((SV*)cleanup_av); - cleanup_av = Nullav; + MP_safe_av_undef(orig_inc) + MP_safe_av_undef(cleanup_av) #ifdef PERL_STACKED_HANDLERS hv_undef(stacked_handlers); @@ -1159,9 +1154,7 @@ perl_clear_env(); /* reset @INC */ - av_undef(GvAV(incgv)); - SvREFCNT_dec(GvAV(incgv)); - GvAV(incgv) = Nullav; + MP_safe_av_undef(GvAV(incgv)) GvAV(incgv) = av_copy_array(orig_inc); /* reset $/ */