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 739bb82ab4676ac3e9d1414fcaa013d6d16acf43..9fe07d38ecb73cafce239634c083c868e5ded03e 100644 |
--- a/net/socket/client_socket_pool_base.cc |
+++ b/net/socket/client_socket_pool_base.cc |
@@ -175,10 +175,12 @@ int ClientSocketPoolBaseHelper::RequestSocket( |
request->net_log().BeginEvent(NetLog::TYPE_SOCKET_POOL, NULL); |
Group& group = group_map_[group_name]; |
int rv = RequestSocketInternal(group_name, request); |
- if (rv != ERR_IO_PENDING) |
+ if (rv != ERR_IO_PENDING) { |
request->net_log().EndEvent(NetLog::TYPE_SOCKET_POOL, NULL); |
- else |
+ delete request; |
+ } else { |
InsertRequestIntoQueue(request, &group.pending_requests); |
+ } |
return rv; |
} |
@@ -654,21 +656,18 @@ void ClientSocketPoolBaseHelper::OnAvailableSocketSlot( |
void ClientSocketPoolBaseHelper::ProcessPendingRequest( |
const std::string& group_name, Group* group) { |
- scoped_ptr<const Request> r(*group->pending_requests.begin()); |
- int rv = RequestSocketInternal(group_name, r.get()); |
+ int rv = RequestSocketInternal(group_name, *group->pending_requests.begin()); |
if (rv != ERR_IO_PENDING) { |
+ scoped_ptr<const Request> r(RemoveRequestFromQueue( |
+ group->pending_requests.begin(), &group->pending_requests)); |
r->net_log().EndEvent(NetLog::TYPE_SOCKET_POOL, NULL); |
- RemoveRequestFromQueue(group->pending_requests.begin(), |
- &group->pending_requests); |
r->callback()->Run(rv); |
if (rv != OK) { |
// |group| may be invalid after the callback, we need to search |
// |group_map_| again. |
MaybeOnAvailableSocketSlot(group_name); |
} |
- } else { |
- r.release(); |
} |
} |