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,
-Jan
Thread Previous
|
Thread Next