From 707954e9f07386e5d737b7fe5058c6623226a661 Mon Sep 17 00:00:00 2001 From: shefty Date: Tue, 24 Feb 2009 23:58:21 +0000 Subject: [PATCH] winverbs/winmad: fix GetOverlappedResult return value The GetOverlappedResults methods are supposed to return an HRESULT, but are returning a BOOL. This makes GetOverlappedResults return WV_SUCCESS when the underlying ::GetOverlappedResults failed. This patch returns the NTSTATUS results (not the Win32 conversion thereof) so that the WV_STATUS values are returned (since these map to NTSTATUS values.) Applied similar fix to winmad. (-SH) Signed-off-by: Fab Tillier Signed-off-by: Sean Hefty git-svn-id: svn://openib.tc.cornell.edu/gen1@1987 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- trunk/core/winmad/user/wm_provider.cpp | 13 +++++-------- trunk/core/winverbs/user/wv_cq.cpp | 4 ++-- trunk/core/winverbs/user/wv_device.cpp | 4 ++-- trunk/core/winverbs/user/wv_ep.cpp | 8 ++++---- trunk/core/winverbs/user/wv_qp.cpp | 12 ++++++------ trunk/core/winverbs/user/wv_srq.cpp | 4 ++-- 6 files changed, 21 insertions(+), 24 deletions(-) diff --git a/trunk/core/winmad/user/wm_provider.cpp b/trunk/core/winmad/user/wm_provider.cpp index 2086af77..fb5efead 100644 --- a/trunk/core/winmad/user/wm_provider.cpp +++ b/trunk/core/winmad/user/wm_provider.cpp @@ -50,12 +50,9 @@ Init(void) { m_OverlapRead.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); m_OverlapWrite.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); - if (m_OverlapRead.hEvent == NULL || m_OverlapWrite.hEvent == NULL) - return E_OUTOFMEMORY; - m_OverlapRead.hEvent = (HANDLE) ((ULONG_PTR) m_OverlapRead.hEvent | 1); - m_OverlapWrite.hEvent = (HANDLE) ((ULONG_PTR) m_OverlapWrite.hEvent | 1); - return NOERROR; + return (m_OverlapRead.hEvent != NULL && m_OverlapWrite.hEvent != NULL) ? + NOERROR : E_OUTOFMEMORY; } CWMProvider::~CWMProvider() @@ -115,8 +112,8 @@ STDMETHODIMP CWMProvider:: GetOverlappedResult(OVERLAPPED *pOverlapped, DWORD *pNumberOfBytesTransferred, BOOL bWait) { - return ::GetOverlappedResult(m_hFile, pOverlapped, - pNumberOfBytesTransferred, bWait); + ::GetOverlappedResult(m_hFile, pOverlapped, pNumberOfBytesTransferred, bWait); + return (HRESULT) pOverlapped->Internal; } STDMETHODIMP_(HANDLE) CWMProvider:: @@ -139,7 +136,7 @@ WmDeviceIoControl(HANDLE hDevice, DWORD dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, &m_OverlapWrite); - ret = GetOverlappedResult(&m_OverlapWrite, lpBytesReturned, TRUE); + ret = ::GetOverlappedResult(m_hFile, &m_OverlapWrite, lpBytesReturned, TRUE); LeaveCriticalSection(&m_CritSecWrite); } else { ret = DeviceIoControl(hDevice, dwIoControlCode, diff --git a/trunk/core/winverbs/user/wv_cq.cpp b/trunk/core/winverbs/user/wv_cq.cpp index 9ce1d9a3..3816efc3 100644 --- a/trunk/core/winverbs/user/wv_cq.cpp +++ b/trunk/core/winverbs/user/wv_cq.cpp @@ -148,8 +148,8 @@ STDMETHODIMP CWVCompletionQueue:: GetOverlappedResult(OVERLAPPED *pOverlapped, DWORD *pNumberOfBytesTransferred, BOOL bWait) { - return ::GetOverlappedResult(m_hFile, pOverlapped, - pNumberOfBytesTransferred, bWait); + ::GetOverlappedResult(m_hFile, pOverlapped, pNumberOfBytesTransferred, bWait); + return (HRESULT) pOverlapped->Internal; } STDMETHODIMP CWVCompletionQueue:: diff --git a/trunk/core/winverbs/user/wv_device.cpp b/trunk/core/winverbs/user/wv_device.cpp index 4034ef58..1038be8f 100644 --- a/trunk/core/winverbs/user/wv_device.cpp +++ b/trunk/core/winverbs/user/wv_device.cpp @@ -181,8 +181,8 @@ STDMETHODIMP CWVDevice:: GetOverlappedResult(OVERLAPPED *pOverlapped, DWORD *pNumberOfBytesTransferred, BOOL bWait) { - return ::GetOverlappedResult(m_hFile, pOverlapped, - pNumberOfBytesTransferred, bWait); + ::GetOverlappedResult(m_hFile, pOverlapped, pNumberOfBytesTransferred, bWait); + return (HRESULT) pOverlapped->Internal; } STDMETHODIMP CWVDevice:: diff --git a/trunk/core/winverbs/user/wv_ep.cpp b/trunk/core/winverbs/user/wv_ep.cpp index ddf64670..9c0513c6 100644 --- a/trunk/core/winverbs/user/wv_ep.cpp +++ b/trunk/core/winverbs/user/wv_ep.cpp @@ -125,8 +125,8 @@ STDMETHODIMP CWVConnectEndpoint:: GetOverlappedResult(OVERLAPPED *pOverlapped, DWORD *pNumberOfBytesTransferred, BOOL bWait) { - return ::GetOverlappedResult(m_hFile, pOverlapped, - pNumberOfBytesTransferred, bWait); + ::GetOverlappedResult(m_hFile, pOverlapped, pNumberOfBytesTransferred, bWait); + return (HRESULT) pOverlapped->Internal; } STDMETHODIMP CWVConnectEndpoint:: @@ -473,8 +473,8 @@ STDMETHODIMP CWVDatagramEndpoint:: GetOverlappedResult(OVERLAPPED *pOverlapped, DWORD *pNumberOfBytesTransferred, BOOL bWait) { - return ::GetOverlappedResult(m_hFile, pOverlapped, - pNumberOfBytesTransferred, bWait); + ::GetOverlappedResult(m_hFile, pOverlapped, pNumberOfBytesTransferred, bWait); + return (HRESULT) pOverlapped->Internal; } STDMETHODIMP CWVDatagramEndpoint:: diff --git a/trunk/core/winverbs/user/wv_qp.cpp b/trunk/core/winverbs/user/wv_qp.cpp index 5946ac82..e33841aa 100644 --- a/trunk/core/winverbs/user/wv_qp.cpp +++ b/trunk/core/winverbs/user/wv_qp.cpp @@ -349,8 +349,8 @@ STDMETHODIMP CWVQueuePair:: GetOverlappedResult(OVERLAPPED *pOverlapped, DWORD *pNumberOfBytesTransferred, BOOL bWait) { - return ::GetOverlappedResult(m_hFile, pOverlapped, - pNumberOfBytesTransferred, bWait); + ::GetOverlappedResult(m_hFile, pOverlapped, pNumberOfBytesTransferred, bWait); + return (HRESULT) pOverlapped->Internal; } STDMETHODIMP CWVQueuePair:: @@ -474,8 +474,8 @@ STDMETHODIMP CWVConnectQueuePair:: GetOverlappedResult(OVERLAPPED *pOverlapped, DWORD *pNumberOfBytesTransferred, BOOL bWait) { - return CWVQueuePair:: - GetOverlappedResult(pOverlapped, pNumberOfBytesTransferred, bWait); + ::GetOverlappedResult(m_hFile, pOverlapped, pNumberOfBytesTransferred, bWait); + return (HRESULT) pOverlapped->Internal; } STDMETHODIMP CWVConnectQueuePair:: @@ -666,8 +666,8 @@ STDMETHODIMP CWVDatagramQueuePair:: GetOverlappedResult(OVERLAPPED *pOverlapped, DWORD *pNumberOfBytesTransferred, BOOL bWait) { - return CWVQueuePair:: - GetOverlappedResult(pOverlapped, pNumberOfBytesTransferred, bWait); + ::GetOverlappedResult(m_hFile, pOverlapped, pNumberOfBytesTransferred, bWait); + return (HRESULT) pOverlapped->Internal; } STDMETHODIMP CWVDatagramQueuePair:: diff --git a/trunk/core/winverbs/user/wv_srq.cpp b/trunk/core/winverbs/user/wv_srq.cpp index 32d5ebe0..519a75e1 100644 --- a/trunk/core/winverbs/user/wv_srq.cpp +++ b/trunk/core/winverbs/user/wv_srq.cpp @@ -152,8 +152,8 @@ STDMETHODIMP CWVSharedReceiveQueue:: GetOverlappedResult(OVERLAPPED *pOverlapped, DWORD *pNumberOfBytesTransferred, BOOL bWait) { - return ::GetOverlappedResult(m_hFile, pOverlapped, - pNumberOfBytesTransferred, bWait); + ::GetOverlappedResult(m_hFile, pOverlapped, pNumberOfBytesTransferred, bWait); + return (HRESULT) pOverlapped->Internal; } STDMETHODIMP CWVSharedReceiveQueue:: -- 2.46.0