summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorwillchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-14 20:40:52 +0000
committerwillchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-14 20:40:52 +0000
commitfd2e53e0043ddab5d0ef4e9ce6dd8c9808e3ea57 (patch)
tree0498602caa17465f638824149f2a2d702616ba70 /net
parent61befb486157007dd5472456217fc2dac5fd7f21 (diff)
downloadchromium_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.cc8
-rw-r--r--net/socket/client_socket_pool_base_unittest.cc7
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", &params_, kDefaultMaxSocketsPerGroup,
+ BoundNetLog());
+
+ ASSERT_FALSE(pool_->HasGroup("a"));
}
TEST_F(ClientSocketPoolBaseTest, RequestSocketsMultipleTimesDoesNothing) {