Chromium Code Reviews| 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 231254a5b7d5cb126920812afbeea606bdf7b2be..619aecc8286f6ab4a74116344292b65bd2c251ae 100644 |
| --- a/net/socket/client_socket_pool_base.cc |
| +++ b/net/socket/client_socket_pool_base.cc |
| @@ -182,6 +182,7 @@ ClientSocketPoolBaseHelper::ClientSocketPoolBaseHelper( |
| handed_out_socket_count_(0), |
| max_sockets_(max_sockets), |
| max_sockets_per_group_(max_sockets_per_group), |
| + use_cleanup_timer_(true), |
| unused_idle_socket_timeout_(unused_idle_socket_timeout), |
| used_idle_socket_timeout_(used_idle_socket_timeout), |
| connect_job_factory_(connect_job_factory), |
| @@ -191,6 +192,9 @@ ClientSocketPoolBaseHelper::ClientSocketPoolBaseHelper( |
| DCHECK_LE(0, max_sockets_per_group); |
| DCHECK_LE(max_sockets_per_group, max_sockets); |
| +#if defined(OS_ANDROID) |
| + use_cleanup_timer_ = false; |
|
mmenke
2011/11/11 03:33:01
Just for consistency, and so it's only modified in
selim
2011/11/11 19:30:58
done
|
| +#endif |
| NetworkChangeNotifier::AddIPAddressObserver(this); |
| } |
| @@ -248,6 +252,8 @@ int ClientSocketPoolBaseHelper::RequestSocket( |
| } else { |
| InsertRequestIntoQueue(request, group->mutable_pending_requests()); |
| } |
| + // Cleanup any timed-out idle sockets if no timer is used. |
| + if (!use_cleanup_timer_) CleanupIdleSockets(false); |
|
mmenke
2011/11/11 03:33:01
nit: Google style is to always split ifs onto two
selim
2011/11/11 19:30:58
done. Even though I find it less readable, code co
|
| return rv; |
| } |
| @@ -295,6 +301,9 @@ void ClientSocketPoolBaseHelper::RequestSockets( |
| if (!deleted_group && group->IsEmpty()) |
| RemoveGroup(group_name); |
| + // Cleanup any timed out idle sockets if no timer is used. |
| + if (!use_cleanup_timer_) CleanupIdleSockets(false); |
|
mmenke
2011/11/11 03:33:01
nit: Google style is to always split ifs onto two
selim
2011/11/11 19:30:58
done
|
| + |
| if (rv == ERR_IO_PENDING) |
| rv = OK; |
| request.net_log().EndEventWithNetErrorCode( |
| @@ -696,9 +705,8 @@ void ClientSocketPoolBaseHelper::EnableConnectBackupJobs() { |
| } |
| void ClientSocketPoolBaseHelper::IncrementIdleCount() { |
| - if (++idle_socket_count_ == 1) |
| - timer_.Start(FROM_HERE, TimeDelta::FromSeconds(kCleanupInterval), this, |
| - &ClientSocketPoolBaseHelper::OnCleanupTimerFired); |
| + if (++idle_socket_count_ == 1 && use_cleanup_timer_) |
| + startIdleSocketTimer(); |
| } |
| void ClientSocketPoolBaseHelper::DecrementIdleCount() { |
| @@ -706,6 +714,24 @@ void ClientSocketPoolBaseHelper::DecrementIdleCount() { |
| timer_.Stop(); |
| } |
| +bool ClientSocketPoolBaseHelper::cleanup_timer_enabled() { |
| + return use_cleanup_timer_; |
|
mmenke
2011/11/11 03:33:01
nit: non-virtual one-liners like this are general
selim
2011/11/11 19:30:58
done
|
| +} |
| + |
| +void ClientSocketPoolBaseHelper::set_cleanup_timer_enabled( bool enabled ) { |
|
mmenke
2011/11/11 03:33:01
nit: "(bool enabled)"
mmenke
2011/11/11 03:33:01
nit: Try to put these in the same order relative
selim
2011/11/11 19:30:58
done
|
| + use_cleanup_timer_ = enabled; |
| + if (enabled) { |
| + if (idle_socket_count_ > 0) |
| + startIdleSocketTimer(); |
| + } else |
| + timer_.Stop(); |
|
mmenke
2011/11/11 03:33:01
nit: If you use braces on the first block of a co
selim
2011/11/11 19:30:58
done
|
| +} |
| + |
| +void ClientSocketPoolBaseHelper::startIdleSocketTimer() { |
| + timer_.Start(FROM_HERE, TimeDelta::FromSeconds(kCleanupInterval), this, |
| + &ClientSocketPoolBaseHelper::OnCleanupTimerFired); |
| +} |
| + |
| void ClientSocketPoolBaseHelper::ReleaseSocket(const std::string& group_name, |
| StreamSocket* socket, |
| int id) { |
| @@ -896,8 +922,7 @@ void ClientSocketPoolBaseHelper::ProcessPendingRequest( |
| RemoveGroup(group_name); |
| request->net_log().EndEventWithNetErrorCode(NetLog::TYPE_SOCKET_POOL, rv); |
| - InvokeUserCallbackLater( |
| - request->handle(), request->callback(), rv); |
| + InvokeUserCallbackLater(request->handle(), request->callback(), rv); |
| } |
| } |