tst: winfsp-tests: --resilient command line option

This commit is contained in:
Bill Zissimopoulos 2016-10-25 15:35:46 -07:00
parent 319e5d4ee6
commit 3f79b2e46d

View File

@ -206,26 +206,35 @@ HANDLE HookCreateFileW(
BOOL HookDeleteFileW( BOOL HookDeleteFileW(
LPCWSTR lpFileName) LPCWSTR lpFileName)
{ {
ULONG MaxTries = 30;
ULONG SleepTimeout = 300;
BOOL Success; BOOL Success;
DWORD LastError; DWORD LastError;
Success = DeleteFileW(lpFileName); Success = DeleteFileW(lpFileName);
LastError = GetLastError(); LastError = GetLastError();
if (OptResilient && !Success) if (OptResilient)
{ {
ULONG MaxTries = 10; if (!Success)
while (!Success && ERROR_SHARING_VIOLATION == LastError && 0 != MaxTries--)
{ {
Sleep(300); while (!Success && ERROR_SHARING_VIOLATION == GetLastError() && 0 != MaxTries--)
{
Sleep(SleepTimeout);
Success = DeleteFileW(lpFileName); Success = DeleteFileW(lpFileName);
} }
} }
else else
{ {
ULONG MaxTries = 3; while (0 != MaxTries--)
while (INVALID_FILE_ATTRIBUTES != GetFileAttributes(lpFileName) && 0 != MaxTries--)
{ {
Sleep(300); HANDLE Handle = CreateFileW(lpFileName, FILE_READ_ATTRIBUTES, 0, 0, OPEN_EXISTING, 0, 0);
if (INVALID_HANDLE_VALUE != Handle)
CloseHandle(Handle); /* should never happen! */
else if (ERROR_ACCESS_DENIED == GetLastError())
Sleep(SleepTimeout);
else
break;
}
} }
} }