>>> It's a Windows feature.  We discovered this recently in debugging another
>>> test failure.  Windows is documented to do asynchronous deletes.  You can't
>>> depend on a file.delete() which returns true to have actually deleted the
>>> file.  It may be the case that another process has a file handle which it 
>>> has
>>> not yet released, or it's simply a delay.
>> I don't get this, the issue sounds more like AV software or Windows 
>> application
>> quality service/agent thing accessing the file but I might be wrong of 
>> course.
>> Are you able to duplicate this reliably and if so, have you looked at it with
>> any tools to see what/who is accessing it that is causing the delay?
> 
> Dave DeHaven was able to reproduce this in his diagnosis of the Arrrghs test 
> failure.

That was a fun one to track down...


> << The DeleteFile function marks a file for deletion on close. Therefore, the 
> file deletion does not occur until the last handle to the file is closed. 
> Subsequent calls to CreateFile to open the file fail with 
> ERROR_ACCESS_DENIED. >>
> 
> (I'm not a Windows developer, so I may be looking in the wrong place or 
> misinterpreting something. Please correct me if I'm wrong.)

No, you have it :) The call to DeleteFile does not actually *delete* the file, 
it simply marks it for deletion at some point in the future.


> If the AE daemon has the file open the moment the test deletes it, the file 
> will remain present until the AE daemon has closed it.
> 
> This seems built into Windows. I think we have to live with it. Presumably 
> these various daemons open the file with CreateFile(FILE_SHARE_DELETE) [2] 
> allowing the "owner" of the file to delete it (eventually). Note this also 
> allows renaming of the file. So the rename-before-delete technique seems like 
> the most promising approach.

I concur.

-DrD-

Reply via email to