• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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()12 SimpleDispatcher::SimpleDispatcher() {
13 }
14 
~SimpleDispatcher()15 SimpleDispatcher::~SimpleDispatcher() {
16 }
17 
HandleSignalsStateChangedNoLock()18 void SimpleDispatcher::HandleSignalsStateChangedNoLock() {
19   lock().AssertAcquired();
20   waiter_list_.AwakeWaitersForStateChange(GetHandleSignalsStateNoLock());
21 }
22 
CancelAllWaitersNoLock()23 void SimpleDispatcher::CancelAllWaitersNoLock() {
24   lock().AssertAcquired();
25   waiter_list_.CancelAllWaiters();
26 }
27 
AddWaiterImplNoLock(Waiter * waiter,MojoHandleSignals signals,uint32_t context)28 MojoResult 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)43 void SimpleDispatcher::RemoveWaiterImplNoLock(Waiter* waiter) {
44   lock().AssertAcquired();
45   waiter_list_.RemoveWaiter(waiter);
46 }
47 
48 }  // namespace system
49 }  // namespace mojo
50