Module: wine Branch: master Commit: 2621e98d04b91ce21d36ac880ace323bd3c6360f URL: http://source.winehq.org/git/wine.git/?a=commit;h=2621e98d04b91ce21d36ac880a...
Author: Hans Leidekker hans@codeweavers.com Date: Wed Nov 16 09:41:47 2011 +0100
winhttp: Clean up properly in request_send.
---
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 )