Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(756)

Unified Diff: net/socket/client_socket_pool_base.cc

Issue 8526006: Close idle sockets next time we are about to send data. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}
}

Powered by Google App Engine
This is Rietveld 408576698