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 02ac58710b5a6e52abbd4ef3c2d5bb7c0dbb4bbd..d6da1c2edd766c8e3f3e4eaf4f6659acbacd7b5a 100644 |
| --- a/net/socket/client_socket_pool_base.cc |
| +++ b/net/socket/client_socket_pool_base.cc |
| @@ -243,17 +243,28 @@ void ClientSocketPoolBaseHelper::RequestSockets( |
| Group* group = GetOrCreateGroup(group_name); |
| + // RequestSocketsInternal() may delete the group. |
| + bool deleted_group = false; |
| + |
| for (int num_iterations_left = num_sockets; |
| group->NumActiveSocketSlots() < num_sockets && |
| num_iterations_left > 0 ; num_iterations_left--) { |
| int rv = RequestSocketInternal(group_name, &request); |
| if (rv < 0 && rv != ERR_IO_PENDING) { |
| // We're encountering a synchronous error. Give up. |
| + if (!ContainsKey(group_map_, group_name)) |
| + deleted_group = true; |
| + break; |
| + } |
| + if (!ContainsKey(group_map_, group_name)) { |
| + // Unexpected. The group should only be getting deleted on synchronous |
| + // error. |
|
Mike Belshe
2010/12/02 00:02:36
If this is unexpected, should we have a NOTREACHED
willchan no longer on Chromium
2010/12/02 00:14:01
Done.
|
| + deleted_group = true; |
| break; |
| } |
| } |
| - if (group->IsEmpty()) |
| + if (!deleted_group && group->IsEmpty()) |
| RemoveGroup(group_name); |
| request.net_log().EndEvent( |