From fdc2143bfabb1e48ea0108fcf12c2e4ad438b44e Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Fri, 29 May 2015 02:04:13 +0200 Subject: Windows: workaround FormatEx keeping references on formatted volume by adding extra delays. --- src/Common/Dlgcode.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'src/Common/Dlgcode.c') diff --git a/src/Common/Dlgcode.c b/src/Common/Dlgcode.c index c9d01290..bfa8a32e 100644 --- a/src/Common/Dlgcode.c +++ b/src/Common/Dlgcode.c @@ -6889,12 +6889,12 @@ retry: return 1; } - -BOOL UnmountVolume (HWND hwndDlg, int nDosDriveNo, BOOL forceUnmount) +static BOOL UnmountVolumeBase (HWND hwndDlg, int nDosDriveNo, BOOL forceUnmount, BOOL ntfsFormatCase) { int result; BOOL forced = forceUnmount; - int dismountMaxRetries = UNMOUNT_MAX_AUTO_RETRIES; + int dismountMaxRetries = ntfsFormatCase? 5 : UNMOUNT_MAX_AUTO_RETRIES; + DWORD retryDelay = ntfsFormatCase? 2000: UNMOUNT_AUTO_RETRY_DELAY; retry: BroadcastDeviceChange (DBT_DEVICEREMOVEPENDING, nDosDriveNo, 0); @@ -6904,7 +6904,7 @@ retry: result = DriverUnmountVolume (hwndDlg, nDosDriveNo, forced); if (result == ERR_FILES_OPEN) - Sleep (UNMOUNT_AUTO_RETRY_DELAY); + Sleep (retryDelay); else break; @@ -6940,6 +6940,16 @@ retry: return TRUE; } +BOOL UnmountVolume (HWND hwndDlg, int nDosDriveNo, BOOL forceUnmount) +{ + return UnmountVolumeBase (hwndDlg, nDosDriveNo, forceUnmount, FALSE); +} + +BOOL UnmountVolumeAfterFormatExCall (HWND hwndDlg, int nDosDriveNo) +{ + return UnmountVolumeBase (hwndDlg, nDosDriveNo, FALSE, TRUE); +} + BOOL IsPasswordCacheEmpty (void) { -- cgit v1.2.3