This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
assume cleared hv can't be re-blessed
authorDavid Mitchell <davem@iabyn.com>
Wed, 11 May 2011 14:31:40 +0000 (15:31 +0100)
committerDavid Mitchell <davem@iabyn.com>
Thu, 19 May 2011 13:49:44 +0000 (14:49 +0100)
commit9c80917f6e6fa3fccba3eea4e7014931b5fa5233
treea39e248e4b0f38b53fda234370d9ed203579ea06
parent104d7b699c0dfac5bf91d1c05f84b3822c2c3e88
assume cleared hv can't be re-blessed

followup to previous commit. I'm fairly confident now that a HV being
freed in sv_clear() can never get re-blessed, and thus its SvSTASH field is
*always* safe to use.

The logic behind this is that once you get to sv_clear(), the HV has a
refcnt of zero, which means either:

* nothing references this, so there's no way to bless it;
* we're in SVf_BREAK territory, in which case something may still
  hold a reference to it, but all destructors will have already been
  called, so nothing can call bless.
sv.c