From: Stan Smith Date: Wed, 15 Sep 2010 16:53:01 +0000 (+0000) Subject: [WINVERBS/WINMAD] incorporate trunk commit 2928. X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=4985b9d591314959cb41160b2ea94663ecb27822;p=~shefty%2Frdma-win.git [WINVERBS/WINMAD] incorporate trunk commit 2928. git-svn-id: svn://openib.tc.cornell.edu/gen1@2930 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- diff --git a/branches/WOF2-3/core/winmad/user/wm_provider.cpp b/branches/WOF2-3/core/winmad/user/wm_provider.cpp index 7b026eab..064b0982 100644 --- a/branches/WOF2-3/core/winmad/user/wm_provider.cpp +++ b/branches/WOF2-3/core/winmad/user/wm_provider.cpp @@ -134,11 +134,14 @@ WmDeviceIoControl(HANDLE hDevice, DWORD dwIoControlCode, if (lpOverlapped == NULL) { EnterCriticalSection(&m_CritSecWrite); - DeviceIoControl(hDevice, dwIoControlCode, - lpInBuffer, nInBufferSize, - lpOutBuffer, nOutBufferSize, - lpBytesReturned, &m_OverlapWrite); - ret = ::GetOverlappedResult(m_hFile, &m_OverlapWrite, lpBytesReturned, TRUE); + ret = DeviceIoControl(hDevice, dwIoControlCode, + lpInBuffer, nInBufferSize, + lpOutBuffer, nOutBufferSize, + lpBytesReturned, &m_OverlapWrite); + if (!ret && GetLastError() == ERROR_IO_PENDING) { + ret = ::GetOverlappedResult(m_hFile, &m_OverlapWrite, + lpBytesReturned, TRUE); + } LeaveCriticalSection(&m_CritSecWrite); } else { ret = DeviceIoControl(hDevice, dwIoControlCode, diff --git a/branches/WOF2-3/core/winverbs/user/wv_base.cpp b/branches/WOF2-3/core/winverbs/user/wv_base.cpp index 5ed4e9f7..e231ec38 100644 --- a/branches/WOF2-3/core/winverbs/user/wv_base.cpp +++ b/branches/WOF2-3/core/winverbs/user/wv_base.cpp @@ -89,12 +89,13 @@ WvDeviceIoControl(HANDLE hDevice, DWORD dwIoControlCode, if (lpOverlapped == NULL) { EnterCriticalSection(&m_CritSec); - DeviceIoControl(hDevice, dwIoControlCode, - lpInBuffer, nInBufferSize, - lpOutBuffer, nOutBufferSize, - lpBytesReturned, &m_Overlap); - - ret = GetOverlappedResult(hDevice, &m_Overlap, lpBytesReturned, TRUE); + ret = DeviceIoControl(hDevice, dwIoControlCode, + lpInBuffer, nInBufferSize, + lpOutBuffer, nOutBufferSize, + lpBytesReturned, &m_Overlap); + if (!ret && GetLastError() == ERROR_IO_PENDING) { + ret = GetOverlappedResult(hDevice, &m_Overlap, lpBytesReturned, TRUE); + } LeaveCriticalSection(&m_CritSec); } else { ret = DeviceIoControl(hDevice, dwIoControlCode,