|
Mongers all,
I'm running a large pure perl 5.6.1 application on
both WinNT 4.0 and Linux 2.2.12-20. When I set one of the config
parameters to a value that invokes some array splices the perl
interpreter always crashes at a particular <mov dword
ptr> instruction for a memory access violation under WinNT, but runs fine in
the same conditions on the Linux system. The crash is a
WinNT flagged "memory access violation" that dumps perl --
perl isn't aware of any problem when this happens. Both perl binaries
are from ActiveState. WinNT is running on an Intel Pentium, Linux on an Intel
Celeron.
Adding and deleting print statements and other
non-functional changes to the perl code causes the point of the crash in the
perl lines to vary over three subs and 100 lines or so, but the mov
instruction location and illegal target memory location do not vary (always the
same sub in the perl interpreter causing the violation?) The
crash point in the app's perl source does not occur near the point of the
array splices, but much later, in an area where the spliced arrays are
being read.
Naturally I assumed at first that some sort of
array boundary violation was the problem. Cross checks of the splices,
which all shorten the arrays or only substitute some elements, didn't reveal any
obvious problem at that level, and functionality is exactly as expected on the
Linux system. The crash occurs when the app is consuming either large
or small amounts of memory, so I don't suspect any kind of memory limit problem
on the NT system. Not knowing much about the inner workings of perl I
haven't tried any debugging w/ the VC++ debugger.
Is there something that I'm
missing?
Most importantly, any suggestions for ways, at the
perl code level, of preventing the crash on WinNT and getting on with my
life?
(The code has to run on a wide variety of systems,
including ActiveState distributions, so switching binaries is not really a fix.
)
TIA,
Jim
|

