diff --git a/olp-cpp-sdk-core/src/http/winhttp/NetworkWinHttp.cpp b/olp-cpp-sdk-core/src/http/winhttp/NetworkWinHttp.cpp index abed863c9..62f8a727f 100644 --- a/olp-cpp-sdk-core/src/http/winhttp/NetworkWinHttp.cpp +++ b/olp-cpp-sdk-core/src/http/winhttp/NetworkWinHttp.cpp @@ -621,8 +621,6 @@ void NetworkWinHttp::RequestCallback(HINTERNET, DWORD_PTR context, DWORD status, auto* handle = reinterpret_cast(context); - logging::ScopedLogContext scope(handle->log_context); - if (!handle->connection_data || !handle->result_data) { OLP_SDK_LOG_WARNING(kLogTag, "RequestCallback to inactive handle, id=" << handle->request_id); @@ -633,6 +631,8 @@ void NetworkWinHttp::RequestCallback(HINTERNET, DWORD_PTR context, DWORD status, ResultData& request_result = *handle->result_data; handle->connection_data->last_used = GetTickCount64(); + logging::ScopedLogContext scope(request_result.log_context); + if (status == WINHTTP_CALLBACK_STATUS_REQUEST_ERROR) { // Error has occurred auto* result = reinterpret_cast(status_info); @@ -972,6 +972,9 @@ void NetworkWinHttp::CompletionThread() { // protect against multiple calls std::swap(result->user_callback, callback); } + + logging::ScopedLogContext scope(result->log_context); + // must call outside lock to prevent deadlock callback(NetworkResponse() .WithError(str) @@ -1049,8 +1052,9 @@ NetworkWinHttp::RequestData* NetworkWinHttp::FindHandle(RequestId id) { return nullptr; } -NetworkWinHttp::ResultData::ResultData(RequestId id, Callback callback, - std::shared_ptr payload) +NetworkWinHttp::ResultData::ResultData( + RequestId id, Callback callback, std::shared_ptr payload, + std::shared_ptr context) : user_callback(std::move(callback)), payload(std::move(payload)), content_length(0), @@ -1061,7 +1065,8 @@ NetworkWinHttp::ResultData::ResultData(RequestId id, Callback callback, completed(false), error(false), bytes_uploaded(0), - bytes_downloaded(0) {} + bytes_downloaded(0), + log_context(std::move(context)) {} NetworkWinHttp::ConnectionData::ConnectionData(HINTERNET http_connection) : http_connection(http_connection) {} @@ -1081,8 +1086,8 @@ NetworkWinHttp::RequestData::RequestData( std::shared_ptr context) : self(self), connection_data(std::move(connection)), - result_data(std::make_shared(id, std::move(callback), - std::move(payload))), + result_data(std::make_shared( + id, std::move(callback), std::move(payload), std::move(context))), body(request.GetBody()), header_callback(std::move(header_callback)), data_callback(std::move(data_callback)), @@ -1091,8 +1096,7 @@ NetworkWinHttp::RequestData::RequestData( ignore_data(request.GetVerb() == NetworkRequest::HttpVerb::HEAD), no_compression(false), uncompress(false), - in_use(false), - log_context(std::move(context)) {} + in_use(false) {} NetworkWinHttp::RequestData::RequestData() : self(nullptr), diff --git a/olp-cpp-sdk-core/src/http/winhttp/NetworkWinHttp.h b/olp-cpp-sdk-core/src/http/winhttp/NetworkWinHttp.h index 844cbea08..db069f705 100644 --- a/olp-cpp-sdk-core/src/http/winhttp/NetworkWinHttp.h +++ b/olp-cpp-sdk-core/src/http/winhttp/NetworkWinHttp.h @@ -63,7 +63,8 @@ class NetworkWinHttp : public Network { private: struct ResultData { ResultData(RequestId id, Callback callback, - std::shared_ptr payload); + std::shared_ptr payload, + std::shared_ptr context); Callback user_callback; std::shared_ptr payload; @@ -77,6 +78,8 @@ class NetworkWinHttp : public Network { std::uint64_t bytes_uploaded; std::uint64_t bytes_downloaded; + + std::shared_ptr log_context; }; struct ConnectionData { @@ -118,7 +121,6 @@ class NetworkWinHttp : public Network { bool no_compression; bool uncompress; bool in_use; - std::shared_ptr log_context; #ifdef NETWORK_HAS_ZLIB z_stream strm; #endif