[1/2] winhttp: Clean up properly in request_send.

Hans Leidekker hans at codeweavers.com
Wed Nov 16 02:41:47 CST 2011


Fixes http://bugs.winehq.org/show_bug.cgi?id=29093
---
 dlls/winhttp/request.c |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c
index e86cdf1..257fc97 100644
--- a/dlls/winhttp/request.c
+++ b/dlls/winhttp/request.c
@@ -2925,14 +2925,18 @@ static HRESULT request_send( struct winhttp_request *request )
     if (!(ret = WinHttpSendRequest( request->hrequest, NULL, 0, ptr, size, size, 0 )))
     {
         err = get_last_error();
+        goto error;
     }
-    if (!sa) heap_free( ptr );
-    else if ((hr = SafeArrayUnaccessData( sa )) != S_OK) return hr;
-    if (!ret) return HRESULT_FROM_WIN32( err );
-    if ((err = wait_for_completion( request ))) return HRESULT_FROM_WIN32( err );
-
+    if ((err = wait_for_completion( request ))) goto error;
+    if (sa) SafeArrayUnaccessData( sa );
+    else heap_free( ptr );
     request->state = REQUEST_STATE_SENT;
     return S_OK;
+
+error:
+    if (sa) SafeArrayUnaccessData( sa );
+    else heap_free( ptr );
+    return HRESULT_FROM_WIN32( err );
 }
 
 static HRESULT request_send_and_receive( struct winhttp_request *request )
-- 
1.7.5.4







More information about the wine-patches mailing list