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

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

Issue 2389613002: Remove stl_util's deletion functions from net/dns/. (Closed)
Patch Set: fixin Created 4 years, 1 month 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
« no previous file with comments | « net/dns/dns_session_unittest.cc ('k') | net/dns/host_resolver_impl.h » ('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_socket_pool.h" 5 #include "net/dns/dns_socket_pool.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "base/memory/ptr_util.h"
9 #include "base/rand_util.h" 10 #include "base/rand_util.h"
10 #include "base/stl_util.h"
11 #include "net/base/address_list.h" 11 #include "net/base/address_list.h"
12 #include "net/base/ip_endpoint.h" 12 #include "net/base/ip_endpoint.h"
13 #include "net/base/net_errors.h" 13 #include "net/base/net_errors.h"
14 #include "net/log/net_log_source.h" 14 #include "net/log/net_log_source.h"
15 #include "net/socket/client_socket_factory.h" 15 #include "net/socket/client_socket_factory.h"
16 #include "net/socket/stream_socket.h" 16 #include "net/socket/stream_socket.h"
17 #include "net/udp/datagram_client_socket.h" 17 #include "net/udp/datagram_client_socket.h"
18 18
19 namespace net { 19 namespace net {
20 20
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 139
140 std::unique_ptr<DatagramClientSocket> AllocateSocket( 140 std::unique_ptr<DatagramClientSocket> AllocateSocket(
141 unsigned server_index) override; 141 unsigned server_index) override;
142 142
143 void FreeSocket(unsigned server_index, 143 void FreeSocket(unsigned server_index,
144 std::unique_ptr<DatagramClientSocket> socket) override; 144 std::unique_ptr<DatagramClientSocket> socket) override;
145 145
146 private: 146 private:
147 void FillPool(unsigned server_index, unsigned size); 147 void FillPool(unsigned server_index, unsigned size);
148 148
149 typedef std::vector<DatagramClientSocket*> SocketVector; 149 typedef std::vector<std::unique_ptr<DatagramClientSocket>> SocketVector;
150 150
151 std::vector<SocketVector> pools_; 151 std::vector<SocketVector> pools_;
152 152
153 DISALLOW_COPY_AND_ASSIGN(DefaultDnsSocketPool); 153 DISALLOW_COPY_AND_ASSIGN(DefaultDnsSocketPool);
154 }; 154 };
155 155
156 // static 156 // static
157 std::unique_ptr<DnsSocketPool> DnsSocketPool::CreateDefault( 157 std::unique_ptr<DnsSocketPool> DnsSocketPool::CreateDefault(
158 ClientSocketFactory* factory, 158 ClientSocketFactory* factory,
159 const RandIntCallback& rand_int_callback) { 159 const RandIntCallback& rand_int_callback) {
160 return std::unique_ptr<DnsSocketPool>( 160 return std::unique_ptr<DnsSocketPool>(
161 new DefaultDnsSocketPool(factory, rand_int_callback)); 161 new DefaultDnsSocketPool(factory, rand_int_callback));
162 } 162 }
163 163
164 void DefaultDnsSocketPool::Initialize( 164 void DefaultDnsSocketPool::Initialize(
165 const std::vector<IPEndPoint>* nameservers, 165 const std::vector<IPEndPoint>* nameservers,
166 NetLog* net_log) { 166 NetLog* net_log) {
167 InitializeInternal(nameservers, net_log); 167 InitializeInternal(nameservers, net_log);
168 168
169 DCHECK(pools_.empty()); 169 DCHECK(pools_.empty());
170 const unsigned num_servers = nameservers->size(); 170 const unsigned num_servers = nameservers->size();
171 pools_.resize(num_servers); 171 pools_.resize(num_servers);
172 for (unsigned server_index = 0; server_index < num_servers; ++server_index) 172 for (unsigned server_index = 0; server_index < num_servers; ++server_index)
173 FillPool(server_index, kInitialPoolSize); 173 FillPool(server_index, kInitialPoolSize);
174 } 174 }
175 175
176 DefaultDnsSocketPool::~DefaultDnsSocketPool() { 176 DefaultDnsSocketPool::~DefaultDnsSocketPool() {
177 unsigned num_servers = pools_.size();
178 for (unsigned server_index = 0; server_index < num_servers; ++server_index) {
179 SocketVector& pool = pools_[server_index];
180 base::STLDeleteElements(&pool);
181 }
182 } 177 }
183 178
184 std::unique_ptr<DatagramClientSocket> DefaultDnsSocketPool::AllocateSocket( 179 std::unique_ptr<DatagramClientSocket> DefaultDnsSocketPool::AllocateSocket(
185 unsigned server_index) { 180 unsigned server_index) {
186 DCHECK_LT(server_index, pools_.size()); 181 DCHECK_LT(server_index, pools_.size());
187 SocketVector& pool = pools_[server_index]; 182 SocketVector& pool = pools_[server_index];
188 183
189 FillPool(server_index, kAllocateMinSize); 184 FillPool(server_index, kAllocateMinSize);
190 if (pool.size() == 0) { 185 if (pool.size() == 0) {
191 DVLOG(1) << "No DNS sockets available in pool " << server_index << "!"; 186 DVLOG(1) << "No DNS sockets available in pool " << server_index << "!";
192 return std::unique_ptr<DatagramClientSocket>(); 187 return std::unique_ptr<DatagramClientSocket>();
193 } 188 }
194 189
195 if (pool.size() < kAllocateMinSize) { 190 if (pool.size() < kAllocateMinSize) {
196 DVLOG(1) << "Low DNS port entropy: wanted " << kAllocateMinSize 191 DVLOG(1) << "Low DNS port entropy: wanted " << kAllocateMinSize
197 << " sockets to choose from, but only have " << pool.size() 192 << " sockets to choose from, but only have " << pool.size()
198 << " in pool " << server_index << "."; 193 << " in pool " << server_index << ".";
199 } 194 }
200 195
201 unsigned socket_index = GetRandomInt(0, pool.size() - 1); 196 unsigned socket_index = GetRandomInt(0, pool.size() - 1);
202 DatagramClientSocket* socket = pool[socket_index]; 197 std::unique_ptr<DatagramClientSocket> socket = std::move(pool[socket_index]);
203 pool[socket_index] = pool.back(); 198 pool[socket_index] = std::move(pool.back());
204 pool.pop_back(); 199 pool.pop_back();
205 200
206 return std::unique_ptr<DatagramClientSocket>(socket); 201 return socket;
207 } 202 }
208 203
209 void DefaultDnsSocketPool::FreeSocket( 204 void DefaultDnsSocketPool::FreeSocket(
210 unsigned server_index, 205 unsigned server_index,
211 std::unique_ptr<DatagramClientSocket> socket) { 206 std::unique_ptr<DatagramClientSocket> socket) {
212 DCHECK_LT(server_index, pools_.size()); 207 DCHECK_LT(server_index, pools_.size());
213 } 208 }
214 209
215 void DefaultDnsSocketPool::FillPool(unsigned server_index, unsigned size) { 210 void DefaultDnsSocketPool::FillPool(unsigned server_index, unsigned size) {
216 SocketVector& pool = pools_[server_index]; 211 SocketVector& pool = pools_[server_index];
217 212
218 for (unsigned pool_index = pool.size(); pool_index < size; ++pool_index) { 213 for (unsigned pool_index = pool.size(); pool_index < size; ++pool_index) {
219 DatagramClientSocket* socket = 214 std::unique_ptr<DatagramClientSocket> socket =
220 CreateConnectedSocket(server_index).release(); 215 CreateConnectedSocket(server_index);
221 if (!socket) 216 if (!socket)
222 break; 217 break;
223 pool.push_back(socket); 218 pool.push_back(std::move(socket));
224 } 219 }
225 } 220 }
226 221
227 } // namespace net 222 } // namespace net
OLDNEW
« no previous file with comments | « net/dns/dns_session_unittest.cc ('k') | net/dns/host_resolver_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698