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.
5 #include "mojo/system/simple_dispatcher.h"
7 #include "base/logging.h"
12 SimpleDispatcher::SimpleDispatcher() {
15 SimpleDispatcher::~SimpleDispatcher() {
18 void SimpleDispatcher::StateChangedNoLock() {
19 lock().AssertAcquired();
20 waiter_list_
.AwakeWaitersForStateChange(SatisfiedFlagsNoLock(),
21 SatisfiableFlagsNoLock());
24 void SimpleDispatcher::CancelAllWaitersNoLock() {
25 lock().AssertAcquired();
26 waiter_list_
.CancelAllWaiters();
29 MojoResult
SimpleDispatcher::AddWaiterImplNoLock(Waiter
* waiter
,
31 MojoResult wake_result
) {
32 lock().AssertAcquired();
34 if ((flags
& SatisfiedFlagsNoLock()))
35 return MOJO_RESULT_ALREADY_EXISTS
;
36 if (!(flags
& SatisfiableFlagsNoLock()))
37 return MOJO_RESULT_FAILED_PRECONDITION
;
39 waiter_list_
.AddWaiter(waiter
, flags
, wake_result
);
40 return MOJO_RESULT_OK
;
43 void SimpleDispatcher::RemoveWaiterImplNoLock(Waiter
* waiter
) {
44 lock().AssertAcquired();
45 waiter_list_
.RemoveWaiter(waiter
);