1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "mojo/system/simple_dispatcher.h" 6 7 #include "base/logging.h" 8 9 namespace mojo { 10 namespace system { 11 SimpleDispatcher()12SimpleDispatcher::SimpleDispatcher() { 13 } 14 ~SimpleDispatcher()15SimpleDispatcher::~SimpleDispatcher() { 16 } 17 HandleSignalsStateChangedNoLock()18void SimpleDispatcher::HandleSignalsStateChangedNoLock() { 19 lock().AssertAcquired(); 20 waiter_list_.AwakeWaitersForStateChange(GetHandleSignalsStateNoLock()); 21 } 22 CancelAllWaitersNoLock()23void SimpleDispatcher::CancelAllWaitersNoLock() { 24 lock().AssertAcquired(); 25 waiter_list_.CancelAllWaiters(); 26 } 27 AddWaiterImplNoLock(Waiter * waiter,MojoHandleSignals signals,uint32_t context)28MojoResult SimpleDispatcher::AddWaiterImplNoLock(Waiter* waiter, 29 MojoHandleSignals signals, 30 uint32_t context) { 31 lock().AssertAcquired(); 32 33 HandleSignalsState state(GetHandleSignalsStateNoLock()); 34 if (state.satisfies(signals)) 35 return MOJO_RESULT_ALREADY_EXISTS; 36 if (!state.can_satisfy(signals)) 37 return MOJO_RESULT_FAILED_PRECONDITION; 38 39 waiter_list_.AddWaiter(waiter, signals, context); 40 return MOJO_RESULT_OK; 41 } 42 RemoveWaiterImplNoLock(Waiter * waiter)43void SimpleDispatcher::RemoveWaiterImplNoLock(Waiter* waiter) { 44 lock().AssertAcquired(); 45 waiter_list_.RemoveWaiter(waiter); 46 } 47 48 } // namespace system 49 } // namespace mojo 50