diff options
Diffstat (limited to 'mojo/environment/async_waiter_impl.cc')
-rw-r--r-- | mojo/environment/async_waiter_impl.cc | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/mojo/environment/async_waiter_impl.cc b/mojo/environment/async_waiter_impl.cc new file mode 100644 index 0000000..ab0599a --- /dev/null +++ b/mojo/environment/async_waiter_impl.cc @@ -0,0 +1,51 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "mojo/environment/async_waiter_impl.h" + +#include "base/bind.h" +#include "mojo/common/handle_watcher.h" + +namespace mojo { +namespace internal { +namespace { + +void OnHandleReady(common::HandleWatcher* watcher, + MojoAsyncWaitCallback callback, + uintptr_t user_data, + MojoResult result) { + delete watcher; + callback(user_data, result); +} + +MojoAsyncWaitID AsyncWait(MojoAsyncWaiter* waiter, + MojoHandle handle, + MojoWaitFlags flags, + MojoDeadline deadline, + MojoAsyncWaitCallback callback, + uintptr_t user_data) { + // This instance will be deleted when done or cancelled. + common::HandleWatcher* watcher = new common::HandleWatcher(); + watcher->Start(Handle(handle), flags, deadline, + base::Bind(&OnHandleReady, watcher, callback, user_data)); + return reinterpret_cast<MojoAsyncWaitID>(watcher); +} + +void CancelWait(MojoAsyncWaiter* waiter, MojoAsyncWaitID wait_id) { + delete reinterpret_cast<common::HandleWatcher*>(wait_id); +} + +MojoAsyncWaiter s_default_async_waiter = { + AsyncWait, + CancelWait +}; + +} // namespace + +MojoAsyncWaiter* GetDefaultAsyncWaiterImpl() { + return &s_default_async_waiter; +} + +} // namespace internal +} // namespace mojo |