On Thu, 22 Jul 2010, Nicholas Clark wrote: > On Tue, Jul 20, 2010 at 06:18:28PM -0700, Jan Dubois wrote: > > Are they by themselves suitable for integration into maint-5.12? They > > look fine to me, but I'm not sure if they assume some other earlier > > fixes in blead or not. > > I had assumed not, because I assumed that they didn't change any visible > behaviour. That they do comes as somewhat a surprise. That's what I thought at first based on your commit message: 4c8f17b905f2 (change 7867) took the approach of a special case in sv_setsv() when PL_op indicated that the current OP was OP_AASSIGN. The problem is in one part of pp_aassign, where it was using sv_mortalcopy() on values that were correctly marked as temporaries, but also still needed later. Hence a more targetted solution is to avoid that call, and to instead use API calls that will not steal temporaries. But I can also read this as: the old code may have stolen the PV slot from mortals that were still used later. So if the copied SV was been freed and the PV memory re-used before the original mortal was accessed again, then you might have some memory corruption. > I'm now rather curious to know what the difference between the execution > paths (and stack usage) is with and without the two on Win64. But I'm not > in a position to go digging on it, and it's not clear whether it's > replicateable on any other platform. It can only be replicated with one specific compiler (64-bit VS2008) and only with miniperl.exe. Running with the regular perl.exe works fine. Is there anything in particular you want me to try (that ideally would not require a lot of time :) )? I plan to eventually retry this with VS2010, but don't currently have a VM set up to do this easily. Cheers, -JanThread Previous | Thread Next