Index: net/socket/client_socket_pool_base.cc |
diff --git a/net/socket/client_socket_pool_base.cc b/net/socket/client_socket_pool_base.cc |
index 7e5c24fc931f7044fb7bfc8fae845c4c65aac3ab..5b116e6e455c2391cc68171e121a3623c9533519 100644 |
--- a/net/socket/client_socket_pool_base.cc |
+++ b/net/socket/client_socket_pool_base.cc |
@@ -257,6 +257,7 @@ int ClientSocketPoolBaseHelper::RequestSocketInternal( |
group.jobs.insert(job); |
} else { |
LogBoundConnectJobToRequest(connect_job->net_log().source(), request); |
+ connect_job->GetAdditionalErrorState(handle); |
ClientSocket* error_socket = connect_job->ReleaseSocket(); |
if (error_socket) { |
HandOutSocket(error_socket, false /* not reused */, handle, |
@@ -592,10 +593,10 @@ void ClientSocketPoolBaseHelper::OnConnectJobComplete( |
scoped_ptr<ClientSocket> socket(job->ReleaseSocket()); |
BoundNetLog job_log = job->net_log(); |
- RemoveConnectJob(job, &group); |
if (result == OK) { |
DCHECK(socket.get()); |
+ RemoveConnectJob(job, &group); |
if (!group.pending_requests.empty()) { |
scoped_ptr<const Request> r(RemoveRequestFromQueue( |
group.pending_requests.begin(), &group.pending_requests)); |
@@ -617,6 +618,8 @@ void ClientSocketPoolBaseHelper::OnConnectJobComplete( |
scoped_ptr<const Request> r(RemoveRequestFromQueue( |
group.pending_requests.begin(), &group.pending_requests)); |
LogBoundConnectJobToRequest(job_log.source(), r.get()); |
+ job->GetAdditionalErrorState(r->handle()); |
+ RemoveConnectJob(job, &group); |
if (socket.get()) { |
handed_out_socket = true; |
HandOutSocket(socket.release(), false /* unused socket */, r->handle(), |
@@ -624,7 +627,15 @@ void ClientSocketPoolBaseHelper::OnConnectJobComplete( |
} |
r->net_log().EndEvent(NetLog::TYPE_SOCKET_POOL, |
new NetLogIntegerParameter("net_error", result)); |
+ if (socket.get()) { |
+ handed_out_socket = true; |
+ HandOutSocket( |
+ socket.release(), false /* unused socket */, r->handle(), |
+ base::TimeDelta(), &group, r->net_log()); |
willchan no longer on Chromium
2010/07/15 00:52:24
Is this a bad merge? Did this get copied twice?
|
+ } |
r->callback()->Run(result); |
+ } else { |
+ RemoveConnectJob(job, &group); |
} |
if (!handed_out_socket) |
OnAvailableSocketSlot(group_name, MayHaveStalledGroups()); |