Change 34220 by [EMAIL PROTECTED] on 2008/08/24 12:16:28 Don't add freed SVF_BREAK scalars to the freed list. This may still be referenced, so don't reuse.
Affected files ... ... //depot/perl/sv.c#1554 edit Differences ... ==== //depot/perl/sv.c#1554 (text) ==== Index: perl/sv.c --- perl/sv.c#1553~34215~ 2008-08-22 00:00:17.000000000 -0700 +++ perl/sv.c 2008-08-24 05:16:28.000000000 -0700 @@ -192,13 +192,23 @@ # define POSION_SV_HEAD(sv) #endif +/* Mark an SV head as unused, and add to free list. + * + * If SVf_BREAK is set, skip adding it to the free list, as this SV had + * its refcount artificially decremented during global destruction, so + * there may be dangling pointers to it. The last thing we want in that + * case is for it to be reused. */ + #define plant_SV(p) \ STMT_START { \ + const U32 old_flags = SvFLAGS(p); \ FREE_SV_DEBUG_FILE(p); \ POSION_SV_HEAD(p); \ - SvARENA_CHAIN(p) = (void *)PL_sv_root; \ SvFLAGS(p) = SVTYPEMASK; \ - PL_sv_root = (p); \ + if (!(old_flags & SVf_BREAK)) { \ + SvARENA_CHAIN(p) = (void *)PL_sv_root; \ + PL_sv_root = (p); \ + } \ --PL_sv_count; \ } STMT_END End of Patch.