Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(269)

Side by Side Diff: net/dns/dns_transaction.cc

Issue 15881008: DnsTransaction::RecordLostPacketsIfAny shouldn't crash if some attempts failed to connect and thus … (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address review comments. Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | net/dns/dns_transaction_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/dns/dns_transaction.h" 5 #include "net/dns/dns_transaction.h"
6 6
7 #include <deque> 7 #include <deque>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 784 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 for (first_completed = 0; first_completed < attempts_.size(); 795 for (first_completed = 0; first_completed < attempts_.size();
796 ++first_completed) { 796 ++first_completed) {
797 if (attempts_[first_completed]->is_completed()) 797 if (attempts_[first_completed]->is_completed())
798 break; 798 break;
799 } 799 }
800 // If there were no completed attempts, then we must be offline, so don't 800 // If there were no completed attempts, then we must be offline, so don't
801 // record any attempts as lost packets. 801 // record any attempts as lost packets.
802 if (first_completed == attempts_.size()) 802 if (first_completed == attempts_.size())
803 return; 803 return;
804 804
805 std::vector<int> num_rounds(session_->config().nameservers.size()); 805 size_t num_servers = session_->config().nameservers.size();
806 for (size_t i = 0; i < first_completed; ++i) { 806 for (size_t i = 0; i < first_completed; ++i) {
807 unsigned server_index = attempts_[i]->GetServerIndex();
808 int server_round = num_rounds[server_index]++;
809 // Don't record lost packet unless attempt is in pending state. 807 // Don't record lost packet unless attempt is in pending state.
810 if (!attempts_[i]->is_pending()) 808 if (!attempts_[i]->is_pending())
811 continue; 809 continue;
812 session_->RecordLostPacket(server_index, server_round); 810 unsigned server_index = attempts_[i]->GetServerIndex();
811 // Servers are rotated in round robin, so server round can be calculated
812 // from attempt index.
813 size_t server_round = i / num_servers;
814 session_->RecordLostPacket(server_index, static_cast<int>(server_round));
813 } 815 }
814 } 816 }
815 817
816 void LogResponse(const DnsAttempt* attempt) { 818 void LogResponse(const DnsAttempt* attempt) {
817 if (attempt && attempt->GetResponse()) { 819 if (attempt && attempt->GetResponse()) {
818 net_log_.AddEvent( 820 net_log_.AddEvent(
819 NetLog::TYPE_DNS_TRANSACTION_RESPONSE, 821 NetLog::TYPE_DNS_TRANSACTION_RESPONSE,
820 base::Bind(&DnsAttempt::NetLogResponseCallback, 822 base::Bind(&DnsAttempt::NetLogResponseCallback,
821 base::Unretained(attempt))); 823 base::Unretained(attempt)));
822 } 824 }
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
949 } // namespace 951 } // namespace
950 952
951 // static 953 // static
952 scoped_ptr<DnsTransactionFactory> DnsTransactionFactory::CreateFactory( 954 scoped_ptr<DnsTransactionFactory> DnsTransactionFactory::CreateFactory(
953 DnsSession* session) { 955 DnsSession* session) {
954 return scoped_ptr<DnsTransactionFactory>( 956 return scoped_ptr<DnsTransactionFactory>(
955 new DnsTransactionFactoryImpl(session)); 957 new DnsTransactionFactoryImpl(session));
956 } 958 }
957 959
958 } // namespace net 960 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/dns/dns_transaction_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698