Index: src/ch/AsyncHttpFile.cpp =================================================================== diff -u -N -rd0cfddc68b5ec4dc4e9b73b6f87aa97995c7cc54 -rc0a84bbae34eef6e9763918e3ad02280730b07d0 --- src/ch/AsyncHttpFile.cpp (.../AsyncHttpFile.cpp) (revision d0cfddc68b5ec4dc4e9b73b6f87aa97995c7cc54) +++ src/ch/AsyncHttpFile.cpp (.../AsyncHttpFile.cpp) (revision c0a84bbae34eef6e9763918e3ad02280730b07d0) @@ -66,6 +66,8 @@ // ============================================================================ HRESULT CAsyncHttpFile::Open(const wchar_t* pszPath, const wchar_t* pszUserAgent, const wchar_t* pszHeaders) { + Close(); + if(!pszPath) { SetErrorCode(ERROR_INTERNAL_ERROR); @@ -136,6 +138,7 @@ } else { + SetUrlHandle(hOpenUrl); ::SetEvent(m_hFinishedEvent); } @@ -260,18 +263,8 @@ { SetErrorCode(ERROR_SUCCESS); if(m_hOpenUrl) - { - if(!::InternetCloseHandle(m_hOpenUrl)) - { - if(GetErrorCode() == ERROR_IO_PENDING) - return S_FALSE; - else - return E_FAIL; - } + SetUrlHandle(nullptr); - SetUrlHandle(NULL); - } - if(m_hInternet != nullptr) { ::InternetCloseHandle(m_hInternet); @@ -369,9 +362,11 @@ case INTERNET_STATUS_HANDLE_CREATED: { INTERNET_ASYNC_RESULT* pRes = (INTERNET_ASYNC_RESULT*)lpvStatusInformation; - ATLTRACE(L"INTERNET_STATUS_HANDLE_CREATED error code: %lu\n", pRes->dwError); - - pRequest->pHttpFile->SetUrlHandle((HINTERNET)(pRes->dwResult)); + if(pRes) + { + ATLTRACE(L"INTERNET_STATUS_HANDLE_CREATED error code: %lu\n", pRes->dwError); + pRequest->pHttpFile->SetUrlHandle((HINTERNET)(pRes->dwResult)); + } break; } case INTERNET_STATUS_RESPONSE_RECEIVED: @@ -413,6 +408,9 @@ // ============================================================================ void CAsyncHttpFile::SetUrlHandle(HANDLE hOpenUrl) { + if(m_hOpenUrl && m_hOpenUrl != hOpenUrl) + ::InternetCloseHandle(m_hOpenUrl); + m_hOpenUrl = hOpenUrl; }