Home | History | Annotate | Download | only in synchronization
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "base/synchronization/waitable_event_watcher.h"
      6 
      7 #include "base/compiler_specific.h"
      8 #include "base/synchronization/waitable_event.h"
      9 #include "base/win/object_watcher.h"
     10 
     11 namespace base {
     12 
     13 WaitableEventWatcher::WaitableEventWatcher()
     14     : event_(NULL) {
     15 }
     16 
     17 WaitableEventWatcher::~WaitableEventWatcher() {
     18 }
     19 
     20 bool WaitableEventWatcher::StartWatching(
     21     WaitableEvent* event,
     22     const EventCallback& callback) {
     23   callback_ = callback;
     24   event_ = event;
     25   return watcher_.StartWatching(event->handle(), this);
     26 }
     27 
     28 void WaitableEventWatcher::StopWatching() {
     29   callback_.Reset();
     30   event_ = NULL;
     31   watcher_.StopWatching();
     32 }
     33 
     34 WaitableEvent* WaitableEventWatcher::GetWatchedEvent() {
     35   return event_;
     36 }
     37 
     38 void WaitableEventWatcher::OnObjectSignaled(HANDLE h) {
     39   WaitableEvent* event = event_;
     40   EventCallback callback = callback_;
     41   event_ = NULL;
     42   callback_.Reset();
     43   DCHECK(event);
     44 
     45   callback.Run(event);
     46 }
     47 
     48 }  // namespace base
     49