Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
| 8 #include "base/format_macros.h" | 8 #include "base/format_macros.h" |
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "base/stats_counters.h" | 10 #include "base/stats_counters.h" |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 250 this); | 250 this); |
| 251 StartBackupSocketTimer(group_name); | 251 StartBackupSocketTimer(group_name); |
| 252 } | 252 } |
| 253 | 253 |
| 254 connecting_socket_count_++; | 254 connecting_socket_count_++; |
| 255 | 255 |
| 256 ConnectJob* job = connect_job.release(); | 256 ConnectJob* job = connect_job.release(); |
| 257 group.jobs.insert(job); | 257 group.jobs.insert(job); |
| 258 } else { | 258 } else { |
| 259 LogBoundConnectJobToRequest(connect_job->net_log().source(), request); | 259 LogBoundConnectJobToRequest(connect_job->net_log().source(), request); |
| 260 connect_job->GetAdditionalErrorState(handle); | |
| 260 ClientSocket* error_socket = connect_job->ReleaseSocket(); | 261 ClientSocket* error_socket = connect_job->ReleaseSocket(); |
| 261 if (error_socket) { | 262 if (error_socket) { |
| 262 HandOutSocket(error_socket, false /* not reused */, handle, | 263 HandOutSocket(error_socket, false /* not reused */, handle, |
| 263 base::TimeDelta(), &group, request->net_log()); | 264 base::TimeDelta(), &group, request->net_log()); |
| 264 } | 265 } |
| 265 if (group.IsEmpty()) | 266 if (group.IsEmpty()) |
| 266 group_map_.erase(group_name); | 267 group_map_.erase(group_name); |
| 267 } | 268 } |
| 268 | 269 |
| 269 return rv; | 270 return rv; |
| (...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 585 | 586 |
| 586 DCHECK_NE(ERR_IO_PENDING, result); | 587 DCHECK_NE(ERR_IO_PENDING, result); |
| 587 const std::string group_name = job->group_name(); | 588 const std::string group_name = job->group_name(); |
| 588 GroupMap::iterator group_it = group_map_.find(group_name); | 589 GroupMap::iterator group_it = group_map_.find(group_name); |
| 589 CHECK(group_it != group_map_.end()); | 590 CHECK(group_it != group_map_.end()); |
| 590 Group& group = group_it->second; | 591 Group& group = group_it->second; |
| 591 | 592 |
| 592 scoped_ptr<ClientSocket> socket(job->ReleaseSocket()); | 593 scoped_ptr<ClientSocket> socket(job->ReleaseSocket()); |
| 593 | 594 |
| 594 BoundNetLog job_log = job->net_log(); | 595 BoundNetLog job_log = job->net_log(); |
| 595 RemoveConnectJob(job, &group); | |
| 596 | 596 |
| 597 if (result == OK) { | 597 if (result == OK) { |
| 598 DCHECK(socket.get()); | 598 DCHECK(socket.get()); |
| 599 RemoveConnectJob(job, &group); | |
| 599 if (!group.pending_requests.empty()) { | 600 if (!group.pending_requests.empty()) { |
| 600 scoped_ptr<const Request> r(RemoveRequestFromQueue( | 601 scoped_ptr<const Request> r(RemoveRequestFromQueue( |
| 601 group.pending_requests.begin(), &group.pending_requests)); | 602 group.pending_requests.begin(), &group.pending_requests)); |
| 602 LogBoundConnectJobToRequest(job_log.source(), r.get()); | 603 LogBoundConnectJobToRequest(job_log.source(), r.get()); |
| 603 HandOutSocket( | 604 HandOutSocket( |
| 604 socket.release(), false /* unused socket */, r->handle(), | 605 socket.release(), false /* unused socket */, r->handle(), |
| 605 base::TimeDelta(), &group, r->net_log()); | 606 base::TimeDelta(), &group, r->net_log()); |
| 606 r->net_log().EndEvent(NetLog::TYPE_SOCKET_POOL, NULL); | 607 r->net_log().EndEvent(NetLog::TYPE_SOCKET_POOL, NULL); |
| 607 r->callback()->Run(result); | 608 r->callback()->Run(result); |
| 608 } else { | 609 } else { |
| 609 AddIdleSocket(socket.release(), false /* unused socket */, &group); | 610 AddIdleSocket(socket.release(), false /* unused socket */, &group); |
| 610 OnAvailableSocketSlot(group_name, MayHaveStalledGroups()); | 611 OnAvailableSocketSlot(group_name, MayHaveStalledGroups()); |
| 611 } | 612 } |
| 612 } else { | 613 } else { |
| 613 // If we got a socket, it must contain error information so pass that | 614 // If we got a socket, it must contain error information so pass that |
| 614 // up so that the caller can retrieve it. | 615 // up so that the caller can retrieve it. |
| 615 bool handed_out_socket = false; | 616 bool handed_out_socket = false; |
| 616 if (!group.pending_requests.empty()) { | 617 if (!group.pending_requests.empty()) { |
| 617 scoped_ptr<const Request> r(RemoveRequestFromQueue( | 618 scoped_ptr<const Request> r(RemoveRequestFromQueue( |
| 618 group.pending_requests.begin(), &group.pending_requests)); | 619 group.pending_requests.begin(), &group.pending_requests)); |
| 619 LogBoundConnectJobToRequest(job_log.source(), r.get()); | 620 LogBoundConnectJobToRequest(job_log.source(), r.get()); |
| 621 job->GetAdditionalErrorState(r->handle()); | |
| 622 RemoveConnectJob(job, &group); | |
| 620 if (socket.get()) { | 623 if (socket.get()) { |
| 621 handed_out_socket = true; | 624 handed_out_socket = true; |
| 622 HandOutSocket(socket.release(), false /* unused socket */, r->handle(), | 625 HandOutSocket(socket.release(), false /* unused socket */, r->handle(), |
| 623 base::TimeDelta(), &group, r->net_log()); | 626 base::TimeDelta(), &group, r->net_log()); |
| 624 } | 627 } |
| 625 r->net_log().EndEvent(NetLog::TYPE_SOCKET_POOL, | 628 r->net_log().EndEvent(NetLog::TYPE_SOCKET_POOL, |
| 626 new NetLogIntegerParameter("net_error", result)); | 629 new NetLogIntegerParameter("net_error", result)); |
| 630 if (socket.get()) { | |
| 631 handed_out_socket = true; | |
| 632 HandOutSocket( | |
| 633 socket.release(), false /* unused socket */, r->handle(), | |
| 634 base::TimeDelta(), &group, r->net_log()); | |
|
willchan no longer on Chromium
2010/07/15 00:52:24
Is this a bad merge? Did this get copied twice?
| |
| 635 } | |
| 627 r->callback()->Run(result); | 636 r->callback()->Run(result); |
| 637 } else { | |
| 638 RemoveConnectJob(job, &group); | |
| 628 } | 639 } |
| 629 if (!handed_out_socket) | 640 if (!handed_out_socket) |
| 630 OnAvailableSocketSlot(group_name, MayHaveStalledGroups()); | 641 OnAvailableSocketSlot(group_name, MayHaveStalledGroups()); |
| 631 } | 642 } |
| 632 } | 643 } |
| 633 | 644 |
| 634 void ClientSocketPoolBaseHelper::OnIPAddressChanged() { | 645 void ClientSocketPoolBaseHelper::OnIPAddressChanged() { |
| 635 Flush(); | 646 Flush(); |
| 636 } | 647 } |
| 637 | 648 |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 791 return; | 802 return; |
| 792 } | 803 } |
| 793 } | 804 } |
| 794 | 805 |
| 795 LOG(DFATAL) << "No idle socket found to close!."; | 806 LOG(DFATAL) << "No idle socket found to close!."; |
| 796 } | 807 } |
| 797 | 808 |
| 798 } // namespace internal | 809 } // namespace internal |
| 799 | 810 |
| 800 } // namespace net | 811 } // namespace net |
| OLD | NEW |