diff options
Diffstat (limited to 'base/thread.cc')
-rw-r--r-- | base/thread.cc | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/base/thread.cc b/base/thread.cc index cec558b..25379e1 100644 --- a/base/thread.cc +++ b/base/thread.cc @@ -33,10 +33,13 @@ #include "base/thread.h" #include "base/message_loop.h" +#include "base/object_watcher.h" #include "base/ref_counted.h" #include "base/string_util.h" #include "base/win_util.h" +namespace { + // This class is used when starting a thread. It passes information to the // thread function. It is referenced counted so we can cleanup the event // object used to synchronize thread startup properly. @@ -65,20 +68,15 @@ class ThreadQuitTask : public Task { }; // Once an object is signaled, quits the current inner message loop. -class QuitOnSignal : public MessageLoop::Watcher { +class QuitOnSignal : public base::ObjectWatcher::Delegate { public: - explicit QuitOnSignal(HANDLE signal) : signal_(signal) { - } virtual void OnObjectSignaled(HANDLE object) { - DCHECK_EQ(object, signal_); - MessageLoop::current()->WatchObject(signal_, NULL); MessageLoop::current()->Quit(); } - private: - HANDLE signal_; - DISALLOW_EVIL_CONSTRUCTORS(QuitOnSignal); }; +} // namespace + Thread::Thread(const char *name) : thread_(NULL), thread_id_(0), @@ -198,8 +196,10 @@ void Thread::InternalStop(bool run_message_loop) { message_loop_->PostTask(FROM_HERE, new ThreadQuitTask()); if (run_message_loop) { - QuitOnSignal signal_watcher(thread_); - MessageLoop::current()->WatchObject(thread_, &signal_watcher); + QuitOnSignal quit_on_signal; + base::ObjectWatcher signal_watcher; + CHECK(signal_watcher.StartWatching(thread_, &quit_on_signal)); + bool old_state = MessageLoop::current()->NestableTasksAllowed(); MessageLoop::current()->SetNestableTasksAllowed(true); MessageLoop::current()->Run(); |