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 ab959cf06e2dde5c6c2d59f2f6526a53968a99a5..5bdd1f147e165f653c23892cfbc45d80c50d8aea 100644 |
| --- a/net/socket/client_socket_pool_base.cc |
| +++ b/net/socket/client_socket_pool_base.cc |
| @@ -369,11 +369,21 @@ int ClientSocketPoolBaseHelper::RequestSocketInternal( |
| if (preconnecting && !closed) |
| return ERR_PRECONNECT_MAX_SOCKET_LIMIT; |
| } else { |
| - // We could check if we really have a stalled group here, but it requires |
| - // a scan of all groups, so just flip a flag here, and do the check later. |
| - request->net_log().AddEvent( |
| - NetLog::TYPE_SOCKET_POOL_STALLED_MAX_SOCKETS, NULL); |
| - return ERR_IO_PENDING; |
| + do { |
| + if (!CloseOneIdleConnectionInLayeredPool()) { |
| + // We could check if we really have a stalled group here, but it |
| + // requires a scan of all groups, so just flip a flag here, and do |
|
willchan no longer on Chromium
2012/04/11 11:14:47
Stale comment? I don't think we flip a flag anymor
Ryan Hamilton
2012/04/16 20:51:54
Missed your comment earlier. Done.
|
| + // the check later. |
| + request->net_log().AddEvent( |
| + NetLog::TYPE_SOCKET_POOL_STALLED_MAX_SOCKETS, NULL); |
| + return ERR_IO_PENDING; |
| + } |
| + } while (ReachedMaxSocketsLimit()); |
| + |
| + // It is possible that CloseOneIdleConnectionInLayeredPool() has deleted |
| + // our Group (see http://crbug.com/109876), so look it up again |
| + // to be safe. |
| + group = GetOrCreateGroup(group_name); |
| } |
| } |