Index: net/base/address_tracker_linux.h |
diff --git a/net/base/address_tracker_linux.h b/net/base/address_tracker_linux.h |
index 415e8c89e9d8dc354d48c8a48dc24064068f71fd..94a384a74b82bf33e84ad023dd8fa953d93997a0 100644 |
--- a/net/base/address_tracker_linux.h |
+++ b/net/base/address_tracker_linux.h |
@@ -20,6 +20,7 @@ |
#include "base/message_loop/message_loop.h" |
#include "base/synchronization/condition_variable.h" |
#include "base/synchronization/lock.h" |
+#include "base/threading/thread_checker.h" |
#include "net/base/net_util.h" |
#include "net/base/network_change_notifier.h" |
@@ -33,19 +34,29 @@ class NET_EXPORT_PRIVATE AddressTrackerLinux : |
public: |
typedef std::map<IPAddressNumber, struct ifaddrmsg> AddressMap; |
- // Will run |address_callback| when the AddressMap changes, |link_callback| |
- // when the list of online links changes, and |tunnel_callback| when the list |
- // of online tunnels changes. |
+ // Non-tracking version constructor: it takes a snapshot of current |
+ // system configuration once Init() returns. The configuration is |
pauljensen
2014/09/19 19:25:39
This is incorrect, the snapshot is not taken when
guoweis2
2014/09/19 22:12:55
Done.
|
+ // available through GetOnlineLinks() and GetAddressMap(). |
+ AddressTrackerLinux(); |
+ |
+ // Tracking version constructor: it will run |address_callback| when |
+ // the AddressMap changes, |link_callback| when the list of online |
+ // links changes, and |tunnel_callback| when the list of online |
+ // tunnels changes. |
AddressTrackerLinux(const base::Closure& address_callback, |
const base::Closure& link_callback, |
const base::Closure& tunnel_callback); |
virtual ~AddressTrackerLinux(); |
- // Starts watching system configuration for changes. The current thread must |
- // have a MessageLoopForIO. |
+ // In tracking mode, it starts watching system configuration for |
pauljensen
2014/09/19 19:25:40
system->the system
guoweis2
2014/09/19 22:12:55
Done.
|
+ // changes. The current thread must have a MessageLoopForIO. For |
+ // non-tracking mode, the |AddressMap| and |online_links_| will be a |
+ // one time snapshot of current system configuration after Init() |
+ // returns. |
pauljensen
2014/09/19 19:25:40
|AddressMap| is a type but |online_links_| is a pr
guoweis2
2014/09/19 22:12:55
Done.
|
void Init(); |
AddressMap GetAddressMap() const; |
+ base::hash_set<int> GetOnlineLinks() const; |
pauljensen
2014/09/19 19:25:39
This needs a comment, maybe "Returns set of interf
guoweis2
2014/09/19 22:12:55
Done.
|
// Implementation of NetworkChangeNotifierLinux::GetCurrentConnectionType(). |
// Safe to call from any thread, but will block until Init() has completed. |
@@ -54,6 +65,20 @@ class NET_EXPORT_PRIVATE AddressTrackerLinux : |
private: |
friend class AddressTrackerLinuxTest; |
+ // In tracking mode, holds |lock| while alive. In non-tracking mode, |
+ // enforces single-threaded access. |
+ class AddressTrackerAutoLock { |
+ public: |
+ AddressTrackerAutoLock(const AddressTrackerLinux& tracker, |
+ base::Lock& lock); |
+ ~AddressTrackerAutoLock(); |
+ |
+ private: |
+ const AddressTrackerLinux& tracker_; |
+ base::Lock& lock_; |
+ DISALLOW_COPY_AND_ASSIGN(AddressTrackerAutoLock); |
+ }; |
+ |
// A function that returns the name of an interface given the interface index |
// in |interface_index|. |
typedef const char* (*GetInterfaceNameFunction)(int interface_index); |
@@ -105,12 +130,18 @@ class NET_EXPORT_PRIVATE AddressTrackerLinux : |
AddressMap address_map_; |
// Set of interface indices for links that are currently online. |
+ mutable base::Lock online_links_lock_; |
base::hash_set<int> online_links_; |
base::Lock is_offline_lock_; |
bool is_offline_; |
bool is_offline_initialized_; |
base::ConditionVariable is_offline_initialized_cv_; |
+ bool tracking_; |
+ |
+ // A |ThreadChecker| used to verify single-threaded access in |
pauljensen
2014/09/19 19:25:40
Remove "A |ThreadChecker|" as this is redundant wi
guoweis2
2014/09/19 22:12:55
Done.
|
+ // non-tracking mode. |
+ base::ThreadChecker thread_checker_; |
}; |
} // namespace internal |