diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-01-04 14:17:57 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-01-05 10:05:06 +0000 |
commit | 39d357e3248f80abea0159765ff39554affb40db (patch) | |
tree | aba0e6bfb76de0244bba0f5fdbd64b830dd6e621 /chromium/base/win/object_watcher.cc | |
parent | 87778abf5a1f89266f37d1321b92a21851d8244d (diff) | |
download | qtwebengine-chromium-39d357e3248f80abea0159765ff39554affb40db.tar.gz |
BASELINE: Update Chromium to 55.0.2883.105
And updates ninja to 1.7.2
Change-Id: I20d43c737f82764d857ada9a55586901b18b9243
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/base/win/object_watcher.cc')
-rw-r--r-- | chromium/base/win/object_watcher.cc | 54 |
1 files changed, 20 insertions, 34 deletions
diff --git a/chromium/base/win/object_watcher.cc b/chromium/base/win/object_watcher.cc index 4df54a45d6b..9a7eea2b054 100644 --- a/chromium/base/win/object_watcher.cc +++ b/chromium/base/win/object_watcher.cc @@ -6,19 +6,14 @@ #include "base/bind.h" #include "base/logging.h" +#include "base/threading/thread_task_runner_handle.h" namespace base { namespace win { //----------------------------------------------------------------------------- -ObjectWatcher::ObjectWatcher() - : object_(NULL), - wait_object_(NULL), - origin_loop_(NULL), - run_once_(true), - weak_factory_(this) { -} +ObjectWatcher::ObjectWatcher() : weak_factory_(this) {} ObjectWatcher::~ObjectWatcher() { StopWatching(); @@ -38,7 +33,7 @@ bool ObjectWatcher::StopWatching() { return false; // Make sure ObjectWatcher is used in a single-threaded fashion. - DCHECK_EQ(origin_loop_, MessageLoop::current()); + DCHECK(task_runner_->BelongsToCurrentThread()); // Blocking call to cancel the wait. Any callbacks already in progress will // finish before we return from this call. @@ -47,16 +42,12 @@ bool ObjectWatcher::StopWatching() { return false; } - weak_factory_.InvalidateWeakPtrs(); - object_ = NULL; - wait_object_ = NULL; - - origin_loop_->RemoveDestructionObserver(this); + Reset(); return true; } bool ObjectWatcher::IsWatching() const { - return object_ != NULL; + return object_ != nullptr; } HANDLE ObjectWatcher::GetWatchedObject() const { @@ -70,22 +61,18 @@ void CALLBACK ObjectWatcher::DoneWaiting(void* param, BOOLEAN timed_out) { // The destructor blocks on any callbacks that are in flight, so we know that // that is always a pointer to a valid ObjectWater. ObjectWatcher* that = static_cast<ObjectWatcher*>(param); - that->origin_loop_->task_runner()->PostTask(FROM_HERE, that->callback_); + that->task_runner_->PostTask(FROM_HERE, that->callback_); if (that->run_once_) that->callback_.Reset(); } bool ObjectWatcher::StartWatchingInternal(HANDLE object, Delegate* delegate, bool execute_only_once) { - CHECK(delegate); - if (wait_object_) { - NOTREACHED() << "Already watching an object"; - return false; - } + DCHECK(delegate); + DCHECK(!wait_object_) << "Already watching an object"; + DCHECK(ThreadTaskRunnerHandle::IsSet()); - origin_loop_ = MessageLoop::current(); - if (!origin_loop_) - return false; + task_runner_ = ThreadTaskRunnerHandle::Get(); run_once_ = execute_only_once; @@ -97,21 +84,17 @@ bool ObjectWatcher::StartWatchingInternal(HANDLE object, Delegate* delegate, // DoneWaiting can be synchronously called from RegisterWaitForSingleObject, // so set up all state now. - callback_ = base::Bind(&ObjectWatcher::Signal, weak_factory_.GetWeakPtr(), - delegate); + callback_ = + Bind(&ObjectWatcher::Signal, weak_factory_.GetWeakPtr(), delegate); object_ = object; if (!RegisterWaitForSingleObject(&wait_object_, object, DoneWaiting, this, INFINITE, wait_flags)) { DPLOG(FATAL) << "RegisterWaitForSingleObject failed"; - object_ = NULL; - wait_object_ = NULL; + Reset(); return false; } - // We need to know if the current message loop is going away so we can - // prevent the wait thread from trying to access a dead message loop. - origin_loop_->AddDestructionObserver(this); return true; } @@ -125,10 +108,13 @@ void ObjectWatcher::Signal(Delegate* delegate) { delegate->OnObjectSignaled(object); } -void ObjectWatcher::WillDestroyCurrentMessageLoop() { - // Need to shutdown the watch so that we don't try to access the MessageLoop - // after this point. - StopWatching(); +void ObjectWatcher::Reset() { + callback_.Reset(); + object_ = nullptr; + wait_object_ = nullptr; + task_runner_ = nullptr; + run_once_ = true; + weak_factory_.InvalidateWeakPtrs(); } } // namespace win |