14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file. 44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "mojo/system/simple_dispatcher.h" 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/logging.h" 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace mojo { 104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace system { 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)SimpleDispatcher::SimpleDispatcher() { 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)SimpleDispatcher::~SimpleDispatcher() { 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void SimpleDispatcher::StateChangedNoLock() { 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) lock().AssertAcquired(); 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) waiter_list_.AwakeWaitersForStateChange(SatisfiedFlagsNoLock(), 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SatisfiableFlagsNoLock()); 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void SimpleDispatcher::CancelAllWaitersNoLock() { 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) lock().AssertAcquired(); 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) waiter_list_.CancelAllWaiters(); 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)MojoResult SimpleDispatcher::AddWaiterImplNoLock(Waiter* waiter, 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MojoWaitFlags flags, 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MojoResult wake_result) { 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) lock().AssertAcquired(); 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if ((flags & SatisfiedFlagsNoLock())) 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return MOJO_RESULT_ALREADY_EXISTS; 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!(flags & SatisfiableFlagsNoLock())) 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return MOJO_RESULT_FAILED_PRECONDITION; 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) waiter_list_.AddWaiter(waiter, flags, wake_result); 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return MOJO_RESULT_OK; 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void SimpleDispatcher::RemoveWaiterImplNoLock(Waiter* waiter) { 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) lock().AssertAcquired(); 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) waiter_list_.RemoveWaiter(waiter); 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace system 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace mojo 50