// Copyright 2013 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/edk/system/waiter_test_utils.h" namespace mojo { namespace edk { namespace test { SimpleWaiterThread::SimpleWaiterThread(MojoResult* result, uintptr_t* context) : base::SimpleThread("waiter_thread"), result_(result), context_(context) { waiter_.Init(); *result_ = 5420734; // Totally invalid result. *context_ = 23489023; // "Random". } SimpleWaiterThread::~SimpleWaiterThread() { Join(); } void SimpleWaiterThread::Run() { *result_ = waiter_.Wait(MOJO_DEADLINE_INDEFINITE, context_); } WaiterThread::WaiterThread(scoped_refptr<Dispatcher> dispatcher, MojoHandleSignals handle_signals, MojoDeadline deadline, uintptr_t context, bool* did_wait_out, MojoResult* result_out, uintptr_t* context_out, HandleSignalsState* signals_state_out) : base::SimpleThread("waiter_thread"), dispatcher_(dispatcher), handle_signals_(handle_signals), deadline_(deadline), context_(context), did_wait_out_(did_wait_out), result_out_(result_out), context_out_(context_out), signals_state_out_(signals_state_out) { *did_wait_out_ = false; // Initialize these with invalid results (so that we'll be sure to catch any // case where they're not set). *result_out_ = 8542346; *context_out_ = 89023444; *signals_state_out_ = HandleSignalsState(~0u, ~0u); } WaiterThread::~WaiterThread() { Join(); } void WaiterThread::Run() { waiter_.Init(); *result_out_ = dispatcher_->AddAwakable(&waiter_, handle_signals_, context_, signals_state_out_); if (*result_out_ != MOJO_RESULT_OK) return; *did_wait_out_ = true; *result_out_ = waiter_.Wait(deadline_, context_out_); dispatcher_->RemoveAwakable(&waiter_, signals_state_out_); } } // namespace test } // namespace edk } // namespace mojo