| Index: net/base/address_tracker_linux.cc
|
| diff --git a/net/base/address_tracker_linux.cc b/net/base/address_tracker_linux.cc
|
| index 367381366954f3280e9171f5d93405f05ed667d7..e0b5ec6cc246a0954cccfc5cca55b87c2251fe01 100644
|
| --- a/net/base/address_tracker_linux.cc
|
| +++ b/net/base/address_tracker_linux.cc
|
| @@ -213,6 +213,11 @@ AddressTrackerLinux::AddressMap AddressTrackerLinux::GetAddressMap() const {
|
| return address_map_;
|
| }
|
|
|
| +base::hash_set<int> AddressTrackerLinux::GetOnlineLinks() const {
|
| + base::AutoLock lock(online_links_lock_);
|
| + return online_links_;
|
| +}
|
| +
|
| NetworkChangeNotifier::ConnectionType
|
| AddressTrackerLinux::GetCurrentConnectionType() {
|
| // http://crbug.com/125097
|
| @@ -256,8 +261,13 @@ void AddressTrackerLinux::ReadMessages(bool* address_changed,
|
| HandleMessage(buffer, rv, address_changed, link_changed, tunnel_changed);
|
| };
|
| if (*link_changed) {
|
| + bool is_offline;
|
| + {
|
| + base::AutoLock lock(online_links_lock_);
|
| + is_offline = online_links_.empty();
|
| + }
|
| base::AutoLock lock(is_offline_lock_);
|
| - is_offline_ = online_links_.empty();
|
| + is_offline_ = is_offline;
|
| }
|
| }
|
|
|
| @@ -319,12 +329,14 @@ void AddressTrackerLinux::HandleMessage(char* buffer,
|
| reinterpret_cast<struct ifinfomsg*>(NLMSG_DATA(header));
|
| if (!(msg->ifi_flags & IFF_LOOPBACK) && (msg->ifi_flags & IFF_UP) &&
|
| (msg->ifi_flags & IFF_LOWER_UP) && (msg->ifi_flags & IFF_RUNNING)) {
|
| + base::AutoLock lock(online_links_lock_);
|
| if (online_links_.insert(msg->ifi_index).second) {
|
| *link_changed = true;
|
| if (IsTunnelInterface(msg))
|
| *tunnel_changed = true;
|
| }
|
| } else {
|
| + base::AutoLock lock(online_links_lock_);
|
| if (online_links_.erase(msg->ifi_index)) {
|
| *link_changed = true;
|
| if (IsTunnelInterface(msg))
|
| @@ -335,6 +347,7 @@ void AddressTrackerLinux::HandleMessage(char* buffer,
|
| case RTM_DELLINK: {
|
| const struct ifinfomsg* msg =
|
| reinterpret_cast<struct ifinfomsg*>(NLMSG_DATA(header));
|
| + base::AutoLock lock(online_links_lock_);
|
| if (online_links_.erase(msg->ifi_index)) {
|
| *link_changed = true;
|
| if (IsTunnelInterface(msg))
|
|
|