Fixed WinHTTP failfast caused by premature cancellation (#6637)
This commit is contained in:
parent
18a1d27d33
commit
a14e3d5ee0
@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
### Bugs Fixed
|
### Bugs Fixed
|
||||||
|
|
||||||
|
Fixed WinHTTP FailFast exception raised when a request is cancelled before the request is actually sent on the wire.
|
||||||
|
|
||||||
### Other Changes
|
### Other Changes
|
||||||
|
|
||||||
## 1.16.0-beta.1 (2025-06-05)
|
## 1.16.0-beta.1 (2025-06-05)
|
||||||
|
|||||||
@ -28,6 +28,7 @@
|
|||||||
// Define the class name that reads from ConnectionPool private members
|
// Define the class name that reads from ConnectionPool private members
|
||||||
namespace Azure { namespace Core { namespace Test {
|
namespace Azure { namespace Core { namespace Test {
|
||||||
class CurlConnectionPool_connectionPoolTest_Test;
|
class CurlConnectionPool_connectionPoolTest_Test;
|
||||||
|
class CurlConnectionPool_DISABLED_connectionPoolTest_Test;
|
||||||
class CurlConnectionPool_uniquePort_Test;
|
class CurlConnectionPool_uniquePort_Test;
|
||||||
class CurlConnectionPool_connectionClose_Test;
|
class CurlConnectionPool_connectionClose_Test;
|
||||||
class SdkWithLibcurl_globalCleanUp_Test;
|
class SdkWithLibcurl_globalCleanUp_Test;
|
||||||
@ -47,6 +48,7 @@ namespace Azure { namespace Core { namespace Http { namespace _detail {
|
|||||||
#if defined(_azure_TESTING_BUILD)
|
#if defined(_azure_TESTING_BUILD)
|
||||||
// Give access to private to this tests class
|
// Give access to private to this tests class
|
||||||
friend class Azure::Core::Test::CurlConnectionPool_connectionPoolTest_Test;
|
friend class Azure::Core::Test::CurlConnectionPool_connectionPoolTest_Test;
|
||||||
|
friend class Azure::Core::Test::CurlConnectionPool_DISABLED_connectionPoolTest_Test;
|
||||||
friend class Azure::Core::Test::CurlConnectionPool_uniquePort_Test;
|
friend class Azure::Core::Test::CurlConnectionPool_uniquePort_Test;
|
||||||
friend class Azure::Core::Test::CurlConnectionPool_connectionClose_Test;
|
friend class Azure::Core::Test::CurlConnectionPool_connectionClose_Test;
|
||||||
friend class Azure::Core::Test::SdkWithLibcurl_globalCleanUp_Test;
|
friend class Azure::Core::Test::SdkWithLibcurl_globalCleanUp_Test;
|
||||||
|
|||||||
@ -22,6 +22,7 @@
|
|||||||
// Define the class name that reads from ConnectionPool private members
|
// Define the class name that reads from ConnectionPool private members
|
||||||
namespace Azure { namespace Core { namespace Test {
|
namespace Azure { namespace Core { namespace Test {
|
||||||
class CurlConnectionPool_connectionPoolTest_Test;
|
class CurlConnectionPool_connectionPoolTest_Test;
|
||||||
|
class CurlConnectionPool_DISABLED_connectionPoolTest_Test;
|
||||||
class SdkWithLibcurl_globalCleanUp_Test;
|
class SdkWithLibcurl_globalCleanUp_Test;
|
||||||
}}} // namespace Azure::Core::Test
|
}}} // namespace Azure::Core::Test
|
||||||
#endif
|
#endif
|
||||||
@ -44,6 +45,7 @@ namespace Azure { namespace Core { namespace Http {
|
|||||||
// Give access to private to this tests class
|
// Give access to private to this tests class
|
||||||
friend class Azure::Core::Test::CurlConnectionPool_connectionPoolTest_Test;
|
friend class Azure::Core::Test::CurlConnectionPool_connectionPoolTest_Test;
|
||||||
friend class Azure::Core::Test::SdkWithLibcurl_globalCleanUp_Test;
|
friend class Azure::Core::Test::SdkWithLibcurl_globalCleanUp_Test;
|
||||||
|
friend class Azure::Core::Test::CurlConnectionPool_DISABLED_connectionPoolTest_Test;
|
||||||
#endif
|
#endif
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -530,8 +530,11 @@ namespace Azure { namespace Core { namespace Http { namespace _detail {
|
|||||||
Azure::Core::Context const& context,
|
Azure::Core::Context const& context,
|
||||||
Azure::DateTime::duration const& pollDuration)
|
Azure::DateTime::duration const& pollDuration)
|
||||||
{
|
{
|
||||||
// Before doing any work, check to make sure that the context hasn't already been cancelled.
|
//
|
||||||
context.ThrowIfCancelled();
|
// Note that we cannot check for cancellation before calling `initiateAction` because it's
|
||||||
|
// possible that the `initiateAction` call is a call to `WinHttpSendRequest` which establishes
|
||||||
|
// the SendContext.
|
||||||
|
//
|
||||||
|
|
||||||
// By definition, there cannot be any actions outstanding at this point because we have not
|
// By definition, there cannot be any actions outstanding at this point because we have not
|
||||||
// yet called initiateAction. So it's safe to reset our state here.
|
// yet called initiateAction. So it's safe to reset our state here.
|
||||||
|
|||||||
@ -41,7 +41,11 @@ namespace Azure { namespace Core { namespace Test {
|
|||||||
|
|
||||||
/*********************** Unique Tests for Libcurl ********************************/
|
/*********************** Unique Tests for Libcurl ********************************/
|
||||||
#if defined(BUILD_CURL_HTTP_TRANSPORT_ADAPTER)
|
#if defined(BUILD_CURL_HTTP_TRANSPORT_ADAPTER)
|
||||||
|
#if _azure_DISABLE_HTTP_BIN_TESTS
|
||||||
|
TEST(CurlConnectionPool, DISABLED_connectionPoolTest)
|
||||||
|
#else
|
||||||
TEST(CurlConnectionPool, connectionPoolTest)
|
TEST(CurlConnectionPool, connectionPoolTest)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(
|
std::lock_guard<std::mutex> lock(
|
||||||
|
|||||||
@ -446,7 +446,11 @@ namespace Azure { namespace Core { namespace Test {
|
|||||||
CheckBodyFromBuffer(*response, expectedResponseBodySize);
|
CheckBodyFromBuffer(*response, expectedResponseBodySize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if _azure_DISABLE_HTTP_BIN_TESTS
|
||||||
|
TEST_P(TransportAdapter, DISABLED_cancelTransferUpload)
|
||||||
|
#else
|
||||||
TEST_P(TransportAdapter, cancelTransferUpload)
|
TEST_P(TransportAdapter, cancelTransferUpload)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
Azure::Core::Url host(AzureSdkHttpbinServer::Put());
|
Azure::Core::Url host(AzureSdkHttpbinServer::Put());
|
||||||
Azure::Core::Context cancelThis;
|
Azure::Core::Context cancelThis;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user