diff options
author | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-03 19:06:01 +0000 |
---|---|---|
committer | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-03 19:06:01 +0000 |
commit | 9715b85f74e95db5345fd33ef43ff48eb0ce983f (patch) | |
tree | 4db4724ac54f5e6a37d0cd6f42e2159e69db4d54 /net/base/network_config_watcher_mac.cc | |
parent | 1cfb7420fb7ea2fa5a6360bbee5424918e84a027 (diff) | |
download | chromium_src-9715b85f74e95db5345fd33ef43ff48eb0ce983f.zip chromium_src-9715b85f74e95db5345fd33ef43ff48eb0ce983f.tar.gz chromium_src-9715b85f74e95db5345fd33ef43ff48eb0ce983f.tar.bz2 |
Fix NetworkChangeNotifier crashes on Mac.
Revert r58230.
BUG=54305,53138
TEST=Make sure ethernet is plugged in. Run Chrome. Unplug ethernet. Does not crash.
Review URL: http://codereview.chromium.org/3350009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@58520 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/network_config_watcher_mac.cc')
-rw-r--r-- | net/base/network_config_watcher_mac.cc | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/net/base/network_config_watcher_mac.cc b/net/base/network_config_watcher_mac.cc index 7a77b35..8767dff 100644 --- a/net/base/network_config_watcher_mac.cc +++ b/net/base/network_config_watcher_mac.cc @@ -15,23 +15,8 @@ DISABLE_RUNNABLE_METHOD_REFCOUNT(net::NetworkConfigWatcherMac); namespace net { -namespace { - -// Called back by OS. Calls OnNetworkConfigChange(). -void DynamicStoreCallback(SCDynamicStoreRef /* store */, - CFArrayRef changed_keys, - void* config_delegate) { - NetworkConfigWatcherMac::Delegate* net_config_delegate = - static_cast<NetworkConfigWatcherMac::Delegate*>(config_delegate); - net_config_delegate->OnNetworkConfigChange(changed_keys); -} - -} // namespace - -NetworkConfigWatcherMac::NetworkConfigWatcherMac( - Delegate* delegate) - : notifier_thread_(new base::Thread("NetworkConfigWatcher")), - delegate_(delegate) { +NetworkConfigWatcherMac::NetworkConfigWatcherMac() + : notifier_thread_(new base::Thread("NetworkConfigWatcher")) { // We create this notifier thread because the notification implementation // needs a thread with a CFRunLoop, and there's no guarantee that // MessageLoop::current() meets that criterion. @@ -40,8 +25,7 @@ NetworkConfigWatcherMac::NetworkConfigWatcherMac( // TODO(willchan): Look to see if there's a better signal for when it's ok to // initialize this, rather than just delaying it by a fixed time. const int kNotifierThreadInitializationDelayMS = 1000; - notifier_thread_->message_loop()->PostDelayedTask( - FROM_HERE, + notifier_thread_->message_loop()->PostDelayedTask(FROM_HERE, NewRunnableMethod(this, &NetworkConfigWatcherMac::Init), kNotifierThreadInitializationDelayMS); } @@ -53,6 +37,16 @@ NetworkConfigWatcherMac::~NetworkConfigWatcherMac() { DCHECK(run_loop_source_ == NULL); } +// static +void NetworkConfigWatcherMac::DynamicStoreCallback( + SCDynamicStoreRef /* store */, + CFArrayRef changed_keys, + void* config) { + NetworkConfigWatcherMac* net_config = + static_cast<NetworkConfigWatcherMac*>(config); + net_config->OnNetworkConfigChange(changed_keys); +} + void NetworkConfigWatcherMac::WillDestroyCurrentMessageLoop() { DCHECK(notifier_thread_ != NULL); // We can't check the notifier_thread_'s message_loop(), as it's now 0. @@ -84,7 +78,7 @@ void NetworkConfigWatcherMac::Init() { kCFRunLoopCommonModes); // Set up notifications for interface and IP address changes. - delegate_->SetDynamicStoreNotificationKeys(store.get()); + SetDynamicStoreNotificationKeys(store.get()); MessageLoop::current()->AddDestructionObserver(this); } |