| Index: base/synchronization/waitable_event_watcher_win.cc
|
| ===================================================================
|
| --- base/synchronization/waitable_event_watcher_win.cc (revision 179992)
|
| +++ base/synchronization/waitable_event_watcher_win.cc (working copy)
|
| @@ -10,23 +10,35 @@
|
|
|
| namespace base {
|
|
|
| +WaitableEventWatcher::ObjectWatcherHelper::ObjectWatcherHelper(
|
| + WaitableEventWatcher* watcher)
|
| + : watcher_(watcher) {
|
| +};
|
| +
|
| +void WaitableEventWatcher::ObjectWatcherHelper::OnObjectSignaled(HANDLE h) {
|
| + watcher_->OnObjectSignaled();
|
| +}
|
| +
|
| +
|
| WaitableEventWatcher::WaitableEventWatcher()
|
| - : event_(NULL) {
|
| + : ALLOW_THIS_IN_INITIALIZER_LIST(helper_(this)),
|
| + event_(NULL),
|
| + delegate_(NULL) {
|
| }
|
|
|
| WaitableEventWatcher::~WaitableEventWatcher() {
|
| }
|
|
|
| -bool WaitableEventWatcher::StartWatching(
|
| - WaitableEvent* event,
|
| - const EventCallback& callback) {
|
| - callback_ = callback;
|
| +bool WaitableEventWatcher::StartWatching(WaitableEvent* event,
|
| + Delegate* delegate) {
|
| + delegate_ = delegate;
|
| event_ = event;
|
| - return watcher_.StartWatching(event->handle(), this);
|
| +
|
| + return watcher_.StartWatching(event->handle(), &helper_);
|
| }
|
|
|
| void WaitableEventWatcher::StopWatching() {
|
| - callback_.Reset();
|
| + delegate_ = NULL;
|
| event_ = NULL;
|
| watcher_.StopWatching();
|
| }
|
| @@ -35,14 +47,14 @@
|
| return event_;
|
| }
|
|
|
| -void WaitableEventWatcher::OnObjectSignaled(HANDLE h) {
|
| +void WaitableEventWatcher::OnObjectSignaled() {
|
| WaitableEvent* event = event_;
|
| - EventCallback callback = callback_;
|
| + Delegate* delegate = delegate_;
|
| event_ = NULL;
|
| - callback_.Reset();
|
| + delegate_ = NULL;
|
| DCHECK(event);
|
|
|
| - callback.Run(event);
|
| + delegate->OnWaitableEventSignaled(event);
|
| }
|
|
|
| } // namespace base
|
|
|