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 1c79923a40057f5db9c2ef2cd9920e4eda4da43e..e20b355dafe3297d2e8601a7fa3485d7164bf582 100644 |
--- a/net/socket/client_socket_pool_base.cc |
+++ b/net/socket/client_socket_pool_base.cc |
@@ -15,7 +15,6 @@ |
#include "base/values.h" |
#include "net/base/net_errors.h" |
#include "net/base/net_log.h" |
-#include "net/socket/client_socket_handle.h" |
using base::TimeDelta; |
@@ -401,7 +400,7 @@ int ClientSocketPoolBaseHelper::RequestSocketInternal( |
if (rv == OK) { |
LogBoundConnectJobToRequest(connect_job->net_log().source(), request); |
if (!preconnecting) { |
- HandOutSocket(connect_job->PassSocket(), false /* not reused */, |
+ HandOutSocket(connect_job->PassSocket(), ClientSocketHandle::UNUSED, |
connect_job->connect_timing(), handle, base::TimeDelta(), |
group, request.net_log()); |
} else { |
@@ -427,7 +426,7 @@ int ClientSocketPoolBaseHelper::RequestSocketInternal( |
error_socket = connect_job->PassSocket(); |
} |
if (error_socket) { |
- HandOutSocket(error_socket.Pass(), false /* not reused */, |
+ HandOutSocket(error_socket.Pass(), ClientSocketHandle::UNUSED, |
connect_job->connect_timing(), handle, base::TimeDelta(), |
group, request.net_log()); |
} else if (group->IsEmpty()) { |
@@ -476,9 +475,16 @@ bool ClientSocketPoolBaseHelper::AssignIdleSocketToRequest( |
base::TimeTicks::Now() - idle_socket_it->start_time; |
IdleSocket idle_socket = *idle_socket_it; |
idle_sockets->erase(idle_socket_it); |
+ // TODO(davidben): If |idle_time| is under some low watermark, consider |
+ // treating as UNUSED rather than UNUSED_IDLE. This will avoid |
+ // HttpNetworkTransaction retrying on some errors. |
+ ClientSocketHandle::SocketReuseType reuse_type = |
+ idle_socket.socket->WasEverUsed() ? |
+ ClientSocketHandle::REUSED_IDLE : |
+ ClientSocketHandle::UNUSED_IDLE; |
HandOutSocket( |
scoped_ptr<StreamSocket>(idle_socket.socket), |
- idle_socket.socket->WasEverUsed(), |
+ reuse_type, |
LoadTimingInfo::ConnectTiming(), |
request.handle(), |
idle_time, |
@@ -878,7 +884,7 @@ void ClientSocketPoolBaseHelper::OnConnectJobComplete( |
if (request) { |
LogBoundConnectJobToRequest(job_log.source(), *request); |
HandOutSocket( |
- socket.Pass(), false /* unused socket */, connect_timing, |
+ socket.Pass(), ClientSocketHandle::UNUSED, connect_timing, |
request->handle(), base::TimeDelta(), group, request->net_log()); |
request->net_log().EndEvent(NetLog::TYPE_SOCKET_POOL); |
InvokeUserCallbackLater(request->handle(), request->callback(), result); |
@@ -898,7 +904,7 @@ void ClientSocketPoolBaseHelper::OnConnectJobComplete( |
RemoveConnectJob(job, group); |
if (socket.get()) { |
handed_out_socket = true; |
- HandOutSocket(socket.Pass(), false /* unused socket */, |
+ HandOutSocket(socket.Pass(), ClientSocketHandle::UNUSED, |
connect_timing, request->handle(), base::TimeDelta(), |
group, request->net_log()); |
} |
@@ -963,7 +969,7 @@ void ClientSocketPoolBaseHelper::ProcessPendingRequest( |
void ClientSocketPoolBaseHelper::HandOutSocket( |
scoped_ptr<StreamSocket> socket, |
- bool reused, |
+ ClientSocketHandle::SocketReuseType reuse_type, |
const LoadTimingInfo::ConnectTiming& connect_timing, |
ClientSocketHandle* handle, |
base::TimeDelta idle_time, |
@@ -971,12 +977,12 @@ void ClientSocketPoolBaseHelper::HandOutSocket( |
const BoundNetLog& net_log) { |
DCHECK(socket); |
handle->SetSocket(socket.Pass()); |
- handle->set_is_reused(reused); |
+ handle->set_reuse_type(reuse_type); |
handle->set_idle_time(idle_time); |
handle->set_pool_id(pool_generation_number_); |
handle->set_connect_timing(connect_timing); |
- if (reused) { |
+ if (handle->is_reused()) { |
net_log.AddEvent( |
NetLog::TYPE_SOCKET_POOL_REUSED_AN_EXISTING_SOCKET, |
NetLog::IntegerCallback( |