develooper Front page | perl.perl5.porters | Postings from February 2003

Re: [perl #20613] Perl_magic_setsig/clearsig problems (patch included)

Thread Previous | Thread Next
Nick Ing-Simmons
February 1, 2003 02:59
Re: [perl #20613] Perl_magic_setsig/clearsig problems (patch included)
Message ID:
Benjamin Goldberg <> writes:
>"Anders Johnson (via RT)" wrote:
>> +              if(PL_psig_ptr[i]) {
>> +                      to_dec=PL_psig_ptr[i];
>> +                      PL_psig_ptr[i]=0;
>> +                      SvREFCNT_dec(to_dec);
>> +              }
>How often is stuff like this used/needed, throughout perl's source?
>It's not exactly something one can grep for, after all...
>I suspect (fear) that many places where this should be done, but isn't.

I don't fully grasp what the problem is yet. The "safe signals" code 
in 5.8 should make the above _less_ necessary. Signals should only 
be asynchronously messing with a always allocated array of counts.
All access to perl SVs etc. should be synchronous - so what is 
getting in during the decrement? And which bit of code let it?

>Eg, av_clear stores sv_undef in the array slot before decrementing the
>refcount of that sv, but neither av_undef nor av_fill do.
>In gv_fetchmeth, I see:
>            SvREFCNT_dec(cv);
>            GvCV(topgv) = cv = Nullcv;
>Should this do something similar (replace, then dec?)?  I suppose that
>it's rare that coderefs get blessed at all, let alone into classes with
>destructors, so it would be hard to provoke this accidentally, but it's
>concievable.  There're other places throughout perl which likewise
>derecemnt before replacing.
>   perl -e '@x = (bless[]); sub DESTROY{pop @x}; undef @x'
>   perl -e '@x = (bless[]); sub DESTROY{pop @x}; $#x=-1'
>   perl -e '%x = (1,bless[]); sub DESTROY{ delete $x{1}; }; %x=()'
>Knowing that the problem exists, I'm sure that someone could come up
>with perl code which provokes the others.
Nick Ing-Simmons

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About