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 12 SimpleDispatcher::SimpleDispatcher() { 13 } 14 15 SimpleDispatcher::~SimpleDispatcher() { 16 } 17 18 void SimpleDispatcher::HandleSignalsStateChangedNoLock() { 19 lock().AssertAcquired(); 20 waiter_list_.AwakeWaitersForStateChange(GetHandleSignalsStateImplNoLock()); 21 } 22 23 void SimpleDispatcher::CancelAllWaitersNoLock() { 24 lock().AssertAcquired(); 25 waiter_list_.CancelAllWaiters(); 26 } 27 28 MojoResult SimpleDispatcher::AddWaiterImplNoLock( 29 Waiter* waiter, 30 MojoHandleSignals signals, 31 uint32_t context, 32 HandleSignalsState* signals_state) { 33 lock().AssertAcquired(); 34 35 HandleSignalsState state(GetHandleSignalsStateImplNoLock()); 36 if (state.satisfies(signals)) { 37 if (signals_state) 38 *signals_state = state; 39 return MOJO_RESULT_ALREADY_EXISTS; 40 } 41 if (!state.can_satisfy(signals)) { 42 if (signals_state) 43 *signals_state = state; 44 return MOJO_RESULT_FAILED_PRECONDITION; 45 } 46 47 waiter_list_.AddWaiter(waiter, signals, context); 48 return MOJO_RESULT_OK; 49 } 50 51 void SimpleDispatcher::RemoveWaiterImplNoLock( 52 Waiter* waiter, 53 HandleSignalsState* signals_state) { 54 lock().AssertAcquired(); 55 waiter_list_.RemoveWaiter(waiter); 56 if (signals_state) 57 *signals_state = GetHandleSignalsStateImplNoLock(); 58 } 59 60 } // namespace system 61 } // namespace mojo 62