| Index: net/socket/websocket_transport_client_socket_pool_unittest.cc
|
| diff --git a/net/socket/websocket_transport_client_socket_pool_unittest.cc b/net/socket/websocket_transport_client_socket_pool_unittest.cc
|
| index eddd9512a936db9e2917bf230f50ef4f56659fd7..38ad6f0588f59e3ed6e7e3086cd78bd5b16408d0 100644
|
| --- a/net/socket/websocket_transport_client_socket_pool_unittest.cc
|
| +++ b/net/socket/websocket_transport_client_socket_pool_unittest.cc
|
| @@ -1110,6 +1110,25 @@ TEST_F(WebSocketTransportClientSocketPoolTest, CancelRequestReclaimsSockets) {
|
| EXPECT_EQ(OK, StartRequest("a", kDefaultPriority));
|
| }
|
|
|
| +// A handshake completing and then the WebSocket closing should only release one
|
| +// Endpoint, not two.
|
| +TEST_F(WebSocketTransportClientSocketPoolTest, EndpointLockIsOnlyReleasedOnce) {
|
| + host_resolver_->set_synchronous_mode(true);
|
| + EXPECT_EQ(OK, StartRequest("a", kDefaultPriority));
|
| + EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority));
|
| + EXPECT_EQ(ERR_IO_PENDING, StartRequest("a", kDefaultPriority));
|
| + // First socket completes handshake.
|
| + WebSocketTransportClientSocketPool::UnlockEndpoint(request(0)->handle());
|
| + // First socket is closed.
|
| + request(0)->handle()->Reset();
|
| + // Second socket should have been released.
|
| + EXPECT_EQ(OK, request(1)->WaitForResult());
|
| + // Third socket should still be waiting for endpoint.
|
| + ASSERT_FALSE(request(2)->handle()->is_initialized());
|
| + EXPECT_EQ(LOAD_STATE_WAITING_FOR_AVAILABLE_SOCKET,
|
| + request(2)->handle()->GetLoadState());
|
| +}
|
| +
|
| } // namespace
|
|
|
| } // namespace net
|
|
|