Chromium Code Reviews| Index: device/serial/async_waiter.cc |
| diff --git a/device/serial/async_waiter.cc b/device/serial/async_waiter.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..ca686c33b6adb5c6e6d15997c554210a95bbc25d |
| --- /dev/null |
| +++ b/device/serial/async_waiter.cc |
| @@ -0,0 +1,38 @@ |
| +// 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 "device/serial/async_waiter.h" |
| + |
| +namespace device { |
| + |
| +AsyncWaiter::AsyncWaiter(mojo::Handle handle, |
| + MojoHandleSignals signals, |
| + const Callback& callback) |
| + : waiter_(mojo::Environment::GetDefaultAsyncWaiter()), |
| + id_(0), |
| + callback_(callback) { |
| + id_ = waiter_->AsyncWait(handle.value(), |
| + signals, |
| + MOJO_DEADLINE_INDEFINITE, |
| + &AsyncWaiter::WaitComplete, |
| + this); |
| +} |
| + |
| +AsyncWaiter::~AsyncWaiter() { |
| + if (id_) |
| + waiter_->CancelWait(id_); |
| +} |
| + |
| +// static |
| +void AsyncWaiter::WaitComplete(void* waiter, MojoResult result) { |
| + static_cast<AsyncWaiter*>(waiter)->WaitCompleteInternal(result); |
| +} |
| + |
| +void AsyncWaiter::WaitCompleteInternal(MojoResult result) { |
| + id_ = 0; |
| + Callback callback = callback_; |
| + callback.Run(result); |
|
raymes
2014/08/05 06:26:44
Why not just make the member non-const and call ca
Sam McNally
2014/08/05 07:26:33
Done.
|
| +} |
| + |
| +} // namespace device |