| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/socket/client_socket_pool_base.h" | 5 #include "net/socket/client_socket_pool_base.h" |
| 6 | 6 |
| 7 #include <math.h> | 7 #include <math.h> |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 362 // NOTE(mmenke): Wonder if we really need different code for each case | 362 // NOTE(mmenke): Wonder if we really need different code for each case |
| 363 // here. Only reason for them now seems to be preconnects. | 363 // here. Only reason for them now seems to be preconnects. |
| 364 if (idle_socket_count() > 0) { | 364 if (idle_socket_count() > 0) { |
| 365 // There's an idle socket in this pool. Either that's because there's | 365 // There's an idle socket in this pool. Either that's because there's |
| 366 // still one in this group, but we got here due to preconnecting bypassing | 366 // still one in this group, but we got here due to preconnecting bypassing |
| 367 // idle sockets, or because there's an idle socket in another group. | 367 // idle sockets, or because there's an idle socket in another group. |
| 368 bool closed = CloseOneIdleSocketExceptInGroup(group); | 368 bool closed = CloseOneIdleSocketExceptInGroup(group); |
| 369 if (preconnecting && !closed) | 369 if (preconnecting && !closed) |
| 370 return ERR_PRECONNECT_MAX_SOCKET_LIMIT; | 370 return ERR_PRECONNECT_MAX_SOCKET_LIMIT; |
| 371 } else { | 371 } else { |
| 372 do { | 372 // We could check if we really have a stalled group here, but it requires |
| 373 if (!CloseOneIdleConnectionInLayeredPool()) { | 373 // a scan of all groups, so just flip a flag here, and do the check later. |
| 374 // We could check if we really have a stalled group here, but it | 374 request->net_log().AddEvent( |
| 375 // requires a scan of all groups, so return ERR_IO_PENDING, and do | 375 NetLog::TYPE_SOCKET_POOL_STALLED_MAX_SOCKETS, NULL); |
| 376 // the check later. | 376 return ERR_IO_PENDING; |
| 377 request->net_log().AddEvent( | |
| 378 NetLog::TYPE_SOCKET_POOL_STALLED_MAX_SOCKETS, NULL); | |
| 379 return ERR_IO_PENDING; | |
| 380 } | |
| 381 } while (ReachedMaxSocketsLimit()); | |
| 382 | |
| 383 // It is possible that CloseOneIdleConnectionInLayeredPool() has deleted | |
| 384 // our Group (see http://crbug.com/109876), so look it up again | |
| 385 // to be safe. | |
| 386 group = GetOrCreateGroup(group_name); | |
| 387 } | 377 } |
| 388 } | 378 } |
| 389 | 379 |
| 390 // We couldn't find a socket to reuse, and there's space to allocate one, | 380 // We couldn't find a socket to reuse, and there's space to allocate one, |
| 391 // so allocate and connect a new one. | 381 // so allocate and connect a new one. |
| 392 scoped_ptr<ConnectJob> connect_job( | 382 scoped_ptr<ConnectJob> connect_job( |
| 393 connect_job_factory_->NewConnectJob(group_name, *request, this)); | 383 connect_job_factory_->NewConnectJob(group_name, *request, this)); |
| 394 | 384 |
| 395 connect_job->Initialize(preconnecting); | 385 connect_job->Initialize(preconnecting); |
| 396 int rv = connect_job->Connect(); | 386 int rv = connect_job->Connect(); |
| (...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1223 // Delete active jobs. | 1213 // Delete active jobs. |
| 1224 STLDeleteElements(&jobs_); | 1214 STLDeleteElements(&jobs_); |
| 1225 | 1215 |
| 1226 // Cancel pending backup job. | 1216 // Cancel pending backup job. |
| 1227 weak_factory_.InvalidateWeakPtrs(); | 1217 weak_factory_.InvalidateWeakPtrs(); |
| 1228 } | 1218 } |
| 1229 | 1219 |
| 1230 } // namespace internal | 1220 } // namespace internal |
| 1231 | 1221 |
| 1232 } // namespace net | 1222 } // namespace net |
| OLD | NEW |