mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-30 19:48:38 -05:00 
			
		
		
		
	tst: winfsp-tests: --resilient command line option
This commit is contained in:
		| @@ -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; | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user