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
 
 
James Eshelman,
Principal,
Nova Software, Inc.
www.nova-sw.com

Reply via email to