I've been toying around with certain bits of pnotes, and a small cleanup came to mind. It's conceptually cleaner, IMO, but I'd like to know other folks opinions.
The bulk of the idea is not to cleanup pnotes in mod_perl's global request pool cleanup handler (spreading pnotes knoledge around) but rather have $r->pnotes() register it's own cleanup, keeping the initialization/cleanup code side by side and has the added (small) benefit that pnotes are not even looked at anymore at cleanup time unless they were actually used. A good idea or not ?: Index: src/modules/perl/modperl_config.c =================================================================== --- src/modules/perl/modperl_config.c (revision 384626) +++ src/modules/perl/modperl_config.c (working copy) @@ -351,11 +351,6 @@ retval = modperl_callback_per_dir(MP_CLEANUP_HANDLER, r, MP_HOOK_RUN_ALL); - if (rcfg->pnotes) { - SvREFCNT_dec(rcfg->pnotes); - rcfg->pnotes = Nullhv; - } - /* undo changes to %ENV caused by +SetupEnv, perl-script, or * $r->subprocess_env, so the values won't persist */ if (MpReqSETUP_ENV(rcfg)) { Index: xs/Apache2/RequestUtil/Apache2__RequestUtil.h =================================================================== --- xs/Apache2/RequestUtil/Apache2__RequestUtil.h (revision 384626) +++ xs/Apache2/RequestUtil/Apache2__RequestUtil.h (working copy) @@ -209,6 +209,20 @@ } static MP_INLINE +apr_status_t modperl_cleanup_pnotes(void *data) { + request_rec *r = data; + MP_dRCFG; + MP_dTHX; + + if (rcfg->pnotes) { + SvREFCNT_dec(rcfg->pnotes); + rcfg->pnotes = Nullhv; + } + + return APR_SUCCESS; +} + +static MP_INLINE SV *mpxs_Apache2__RequestRec_pnotes(pTHX_ request_rec *r, SV *key, SV *val) { MP_dRCFG; @@ -218,6 +232,9 @@ return &PL_sv_undef; } if (!rcfg->pnotes) { + apr_pool_cleanup_register(r->pool, r, + modperl_cleanup_pnotes, + apr_pool_cleanup_null); rcfg->pnotes = newHV(); } -------------------------------------------------------------------------------- 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