Module: wine Branch: master Commit: 1de4129b0a0cd4ce4453920ed79663f412ea468d URL: http://source.winehq.org/git/wine.git/?a=commit;h=1de4129b0a0cd4ce4453920ed7...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Aug 14 13:35:46 2012 +0200
rpcrt4: Properly handle async HTTP failures.
---
dlls/rpcrt4/rpc_transport.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/dlls/rpcrt4/rpc_transport.c b/dlls/rpcrt4/rpc_transport.c index 445f186..76a9714 100644 --- a/dlls/rpcrt4/rpc_transport.c +++ b/dlls/rpcrt4/rpc_transport.c @@ -1844,6 +1844,7 @@ typedef struct _RpcHttpAsyncData { LONG refs; HANDLE completion_event; + WORD async_result; INTERNET_BUFFERSA inet_buffers; CRITICAL_SECTION cs; } RpcHttpAsyncData; @@ -1897,6 +1898,11 @@ static RPC_STATUS wait_async_request(RpcHttpAsyncData *async_data, BOOL call_ret }else { WaitForSingleObject(async_data->completion_event, INFINITE); } + if(async_data->async_result) { + ERR("Async request failed with error %d\n", async_data->async_result); + return RPC_S_SERVER_UNAVAILABLE; + } + return RPC_S_OK; }
@@ -2007,6 +2013,9 @@ static VOID WINAPI rpcrt4_http_internet_callback( TRACE("INTERNET_STATUS_REQUEST_COMPLETED\n"); if (async_data) { + INTERNET_ASYNC_RESULT *async_result = lpvStatusInformation; + + async_data->async_result = async_result->dwResult ? ERROR_SUCCESS : async_result->dwError; SetEvent(async_data->completion_event); RpcHttpAsyncData_Release(async_data); }