perl-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Geoffrey Young <ge...@modperlcookbook.org>
Subject Re: possible pnotes refcounting bug ?
Date Thu, 11 Oct 2007 13:49:32 GMT


Torsten Foertsch wrote:
> Hi,
> 
> this is a snippet from modperl_util.c:modperl_pnotes()
> 
>     if (key) {
>         STRLEN len;
>         char *k = SvPV(key, len);
> 
>         if (val) {
>             retval = *hv_store(*pnotes, k, len, SvREFCNT_inc(val), 0);
>         }
>         else if (hv_exists(*pnotes, k, len)) {
>             retval = *hv_fetch(*pnotes, k, len, FALSE);
>         }
>     }
>     else {
>         retval = newRV_inc((SV *)*pnotes);
>     }
> 
>     return retval ? SvREFCNT_inc(retval) : &PL_sv_undef;
> 
> I am wondering whether the REFCNT is always right. *pnotes is a HV. If the 
> function is called without a key argument the else branch newRV_inc 
> increments the REFCNT of the HV, right? Then the return statement in the last 
> line increments it again? Am I wrong?

philippe is better at this stuff than I am, but I suspect we want to
falsely increment the refcount by (at least) one so that when the retval
goes out of local scope in some handler the value doesn't get cleaned up
by perl and instead waits around for us to manually clean it up at the
end of the request.

--Geoff

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Mime
View raw message