diff options
author | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-14 20:40:52 +0000 |
---|---|---|
committer | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-14 20:40:52 +0000 |
commit | fd2e53e0043ddab5d0ef4e9ce6dd8c9808e3ea57 (patch) | |
tree | 0498602caa17465f638824149f2a2d702616ba70 /net | |
parent | 61befb486157007dd5472456217fc2dac5fd7f21 (diff) | |
download | chromium_src-fd2e53e0043ddab5d0ef4e9ce6dd8c9808e3ea57.zip chromium_src-fd2e53e0043ddab5d0ef4e9ce6dd8c9808e3ea57.tar.gz chromium_src-fd2e53e0043ddab5d0ef4e9ce6dd8c9808e3ea57.tar.bz2 |
Fix preconnect crash on synchronous socket error.
GetAdditionalErrorState() was being called, which stores the error state into the ClientSocketHandle. When we preconnect, we never have a ClientSocketHandle, so don't bother tryiing to store the error state nor get the error socket.
BUG=69214
TEST=net_unittests
Review URL: http://codereview.chromium.org/6293005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@71481 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r-- | net/socket/client_socket_pool_base.cc | 8 | ||||
-rw-r--r-- | net/socket/client_socket_pool_base_unittest.cc | 7 |
2 files changed, 13 insertions, 2 deletions
diff --git a/net/socket/client_socket_pool_base.cc b/net/socket/client_socket_pool_base.cc index 86ba2dd..816ecc9 100644 --- a/net/socket/client_socket_pool_base.cc +++ b/net/socket/client_socket_pool_base.cc @@ -341,8 +341,12 @@ int ClientSocketPoolBaseHelper::RequestSocketInternal( group->AddJob(connect_job.release()); } else { LogBoundConnectJobToRequest(connect_job->net_log().source(), request); - connect_job->GetAdditionalErrorState(handle); - ClientSocket* error_socket = connect_job->ReleaseSocket(); + ClientSocket* error_socket = NULL; + if (!preconnecting) { + DCHECK(handle); + connect_job->GetAdditionalErrorState(handle); + error_socket = connect_job->ReleaseSocket(); + } if (error_socket) { HandOutSocket(error_socket, false /* not reused */, handle, base::TimeDelta(), group, request->net_log()); diff --git a/net/socket/client_socket_pool_base_unittest.cc b/net/socket/client_socket_pool_base_unittest.cc index c6092d7..803966b 100644 --- a/net/socket/client_socket_pool_base_unittest.cc +++ b/net/socket/client_socket_pool_base_unittest.cc @@ -2928,6 +2928,13 @@ TEST_F(ClientSocketPoolBaseTest, RequestSocketsSynchronousError) { BoundNetLog()); ASSERT_FALSE(pool_->HasGroup("a")); + + connect_job_factory_->set_job_type( + TestConnectJob::kMockAdditionalErrorStateJob); + pool_->RequestSockets("a", ¶ms_, kDefaultMaxSocketsPerGroup, + BoundNetLog()); + + ASSERT_FALSE(pool_->HasGroup("a")); } TEST_F(ClientSocketPoolBaseTest, RequestSocketsMultipleTimesDoesNothing) { |