13f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 53f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/synchronization/waitable_event_watcher.h" 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/compiler_specific.h" 83f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/synchronization/waitable_event.h" 93f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/win/object_watcher.h" 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace base { 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottWaitableEventWatcher::ObjectWatcherHelper::ObjectWatcherHelper( 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WaitableEventWatcher* watcher) 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott : watcher_(watcher) { 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid WaitableEventWatcher::ObjectWatcherHelper::OnObjectSignaled(HANDLE h) { 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott watcher_->OnObjectSignaled(); 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottWaitableEventWatcher::WaitableEventWatcher() 243f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen : ALLOW_THIS_IN_INITIALIZER_LIST(helper_(this)), 253f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen event_(NULL), 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delegate_(NULL) { 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottWaitableEventWatcher::~WaitableEventWatcher() { 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottbool WaitableEventWatcher::StartWatching(WaitableEvent* event, 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Delegate* delegate) { 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delegate_ = delegate; 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott event_ = event; 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return watcher_.StartWatching(event->handle(), &helper_); 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid WaitableEventWatcher::StopWatching() { 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delegate_ = NULL; 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott event_ = NULL; 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott watcher_.StopWatching(); 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottWaitableEvent* WaitableEventWatcher::GetWatchedEvent() { 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return event_; 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid WaitableEventWatcher::OnObjectSignaled() { 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WaitableEvent* event = event_; 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Delegate* delegate = delegate_; 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott event_ = NULL; 54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delegate_ = NULL; 55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott DCHECK(event); 56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delegate->OnWaitableEventSignaled(event); 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace base 61