16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file. 46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "device/serial/async_waiter.h" 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace device { 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)AsyncWaiter::AsyncWaiter(mojo::Handle handle, 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) MojoHandleSignals signals, 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const Callback& callback) 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) : waiter_(mojo::Environment::GetDefaultAsyncWaiter()), 136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) id_(0), 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) callback_(callback) { 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) id_ = waiter_->AsyncWait(handle.value(), 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) signals, 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) MOJO_DEADLINE_INDEFINITE, 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) &AsyncWaiter::WaitComplete, 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) this); 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)AsyncWaiter::~AsyncWaiter() { 236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (id_) 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) waiter_->CancelWait(id_); 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// static 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void AsyncWaiter::WaitComplete(void* waiter, MojoResult result) { 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) static_cast<AsyncWaiter*>(waiter)->WaitCompleteInternal(result); 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void AsyncWaiter::WaitCompleteInternal(MojoResult result) { 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) id_ = 0; 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) callback_.Run(result); 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace device 38