Index: chrome/utility/local_discovery/service_discovery_message_handler.cc |
diff --git a/chrome/utility/local_discovery/service_discovery_message_handler.cc b/chrome/utility/local_discovery/service_discovery_message_handler.cc |
index 3a73ad72bcf8d1c90795474b38ad1882040824bf..72d99d61c1cb7b1077896b72ff94b74b179ef262 100644 |
--- a/chrome/utility/local_discovery/service_discovery_message_handler.cc |
+++ b/chrome/utility/local_discovery/service_discovery_message_handler.cc |
@@ -72,32 +72,28 @@ class PreCreatedMDnsSocketFactory : public net::MDnsSocketFactory { |
// net::MDnsSocketFactory implementation: |
virtual void CreateSockets( |
ScopedVector<net::DatagramServerSocket>* sockets) OVERRIDE { |
- for (size_t i = 0; i < sockets_.size(); ++i) { |
- // Takes ownership of sockets_[i].socket; |
- ScopedSocketFactory platform_factory(sockets_[i].socket); |
- scoped_ptr<net::DatagramServerSocket> socket( |
- net::CreateAndBindMDnsSocket(sockets_[i].address_family, |
- sockets_[i].interface_index)); |
- if (socket) |
- sockets->push_back(socket.release()); |
- } |
- sockets_.clear(); |
+ sockets->swap(sockets_); |
+ Reset(); |
} |
- void AddSocket(const SocketInfo& socket) { |
- sockets_.push_back(socket); |
+ void AddSocket(const SocketInfo& socket_info) { |
+ // Takes ownership of socket_info.socket; |
+ ScopedSocketFactory platform_factory(socket_info.socket); |
+ scoped_ptr<net::DatagramServerSocket> socket( |
+ net::CreateAndBindMDnsSocket(socket_info.address_family, |
+ socket_info.interface_index)); |
+ if (socket) { |
+ socket->DetachFromThread(); |
+ sockets_.push_back(socket.release()); |
+ } |
} |
void Reset() { |
- for (size_t i = 0; i < sockets_.size(); ++i) { |
- if (sockets_[i].socket != net::kInvalidSocket) |
- ClosePlatformSocket(sockets_[i].socket); |
- } |
sockets_.clear(); |
} |
private: |
- std::vector<SocketInfo> sockets_; |
+ ScopedVector<net::DatagramServerSocket> sockets_; |
DISALLOW_COPY_AND_ASSIGN(PreCreatedMDnsSocketFactory); |
}; |