Hi, Please see this thread to get a complete description of the problem - http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/074e0e8d-bbaf-4985-be8c-8e1da3cf13bc
I like to get opinion from perl folks about questions raised in the msdn thread. If I need to mail the author of win32.c, please let me know. -Karthik On Fri, Nov 4, 2011 at 3:23 PM, Karthik Rajagopalan <karthik.rajagopa...@schrodinger.com> wrote: > Hi, > > I am seeing a strange problem in my project where perl could not see a > file though it is present in the disk. We run a series of short > backend jobs ( each spanning 10 s ) through perl. The backend job > write an output file and exit, later which perl process would try to > transfer it. The perl process is threaded where master thread acts as > listener waiting for connection/messages and send file list to child > thread ( by checking for file existence ) about what files to > transfer. And child thread does the actual file transfer. > > The job runs fine initially and all of a sudden master thread fail to > detect file written by the backend. Debugging perl code ( 5.10.1 from > http://www.cpan.org/src/ - ASPerl ), I found stati64 of CRT fail and > return -1. On retry, the call seem to work fine. I can guarantee there > there is no race condition involved by backend process as we try to > access the file in perl only after backend exit. I also tried to > capture the events using ProcMon enabling 'File System Activity' and > made sure there are no external process accessing the file. When the > failure happens with stati64, I see the following events in procmon - > > <Time of Day> <Process Name> <PID> <TID> <Operation> <Path> <Result> > <Detail> <Description> > > 5:20:59.5315529 PM > perl.exe 3444 > 3496 CreateFile > D:\scr\rajagopa\test_31\test_31.01.mae SUCCESS Desired Access: Read > Attributes, Synchronize, Disposition: Open, Options: Synchronous IO > Non-Alert, Non-Directory File, Attributes: n/a, ShareMode: None, > AllocationSize: n/a, OpenResult: Opened > n/a NYC\rajagopa > > 5:20:59.5315965 PM > perl.exe 3444 > 1636 DeviceIoControl > D:\scr\rajagopa\test_31\nyc-bld-w06-0-4eb305ae > INVALID PARAMETER Control: 0x12043 (Device:0x1 Function:2064 Method: 3) > n/a NYC\rajagopa > > 5:20:59.5316010 PM > perl.exe 3444 > 3496 QueryInformationVolume > D:\scr\rajagopa\test_31\test_31.01.mae SUCCESS VolumeCreationTime: > 1/20/2011 7:34:15 PM, VolumeSerialNumber: 188D-F175, SupportsObjects: > True, VolumeLabel: scr > n/a NYC\rajagopa > > 5:20:59.5316301 PM > perl.exe 3444 > 3496 QueryAllInformationFile > D:\scr\rajagopa\test_31\test_31.01.mae BUFFER OVERFLOW CreationTime: > 11/3/2011 5:20:47 PM, LastAccessTime: 11/3/2011 5:20:47 PM, > LastWriteTime: 11/3/2011 5:20:47 PM, ChangeTime: 11/3/2011 5:20:47 PM, > FileAttributes: A, AllocationSize: 128, EndOfFile: 126, NumberOfLinks: > 1, DeletePending: False, Directory: False, IndexNumber: > 0x8e00000002f208, EaSize: 0, Access: Read Attributes, Synchronize, > Position: 0, Mode: Synchronous IO Non-Alert, AlignmentRequirement: > Word > n/a NYC\rajagopa > > 5:20:59.5316368 PM > perl.exe 3444 > 1636 DeviceIoControl > D:\scr\rajagopa\test_31\nyc-bld-w06-0-4eb305ae > INVALID PARAMETER Control: 0x12043 (Device:0x1 Function:2064 Method: 3) > n/a NYC\rajagopa > > 5:20:59.5316622 PM > perl.exe 3444 > 3496 CloseFile > D:\scr\rajagopa\test_31\test_31.01.mae SUCCESS n/a NYC\rajagopa > > Has anyone faced a similar situation with windows perl? > > As you can see, the set of file operations involved with > "test_31.01.mae" using stati64 is shown as SUCCESS. But the result of > stati64(..) is -1 and GetLastError(..) give 6. Why would this be? Is > procmon showing wrong status? Is stati64 buggy in threaded > environment? Is it safe to retry the stati64 call if return value is > -1 and GetLastError() is 6? > Please throw pointers as this issue is important to fix soon. > > -Karthik > _______________________________________________ ActivePerl mailing list ActivePerl@listserv.ActiveState.com To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs