fix for [perl #41138] $_ leaks under threads
authorDavid Mitchell <davem@iabyn.com>
Mon, 11 Jan 2010 12:09:12 +0000 (12:09 +0000)
committerDavid Mitchell <davem@iabyn.com>
Mon, 11 Jan 2010 12:49:08 +0000 (12:49 +0000)
commite81cd4d2c506bfc28460d324d94b81010f5ee455
treec7a895853dd2f79063b98b48383784f06d051483
parent80d38338d3280c3d336b87379c4da336e00e635b
fix for [perl #41138] $_ leaks under threads

It's possible for an interpreter to get cloned with an SV copied that ends
up only linked from @_. For example, local $x causes a link to the
original $x SV to be added to the save stack, but when cloning a thread
the save stack isn't copied. If the old $x was also in someone's @_,
then it gets copied, but because @_'s elements  aren't normally reference
counted, old $x ends up with a refcount of zero, and you get a "leaked"
warning when the thread exits.

The workaround is to reify any reify-able AVs in the cloned interpreter
during cloning.

Also fixes [perl #70602], [perl #70974]
sv.c
t/op/threads.t