diff options
author | viettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-28 00:30:04 +0000 |
---|---|---|
committer | viettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-28 00:30:04 +0000 |
commit | 3d58663b00b219889b298b233e0c0e0f80596ed7 (patch) | |
tree | 9a4bdf0e0f48f1af7a083924c2711af9cc7310d1 /mojo/system/simple_dispatcher.cc | |
parent | 82ce871c06a72ffb38f3ddcac1090a2ceed266fb (diff) | |
download | chromium_src-3d58663b00b219889b298b233e0c0e0f80596ed7.zip chromium_src-3d58663b00b219889b298b233e0c0e0f80596ed7.tar.gz chromium_src-3d58663b00b219889b298b233e0c0e0f80596ed7.tar.bz2 |
Initial in-process implementation of some Mojo primitives.
This has an initial in-process implementation of the most basic Mojo primitives:
- MojoClose()
- MojoWait()
- MojoWaitMany()
- MojoCreateMessagePipe()
- MojoWriteMessage()
- MojoReadMessage()
R=darin@chromium.org
Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=225801
Review URL: https://codereview.chromium.org/23621056
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@225821 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'mojo/system/simple_dispatcher.cc')
-rw-r--r-- | mojo/system/simple_dispatcher.cc | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/mojo/system/simple_dispatcher.cc b/mojo/system/simple_dispatcher.cc new file mode 100644 index 0000000..ce2baef --- /dev/null +++ b/mojo/system/simple_dispatcher.cc @@ -0,0 +1,49 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "mojo/system/simple_dispatcher.h" + +#include "base/logging.h" + +namespace mojo { +namespace system { + +SimpleDispatcher::SimpleDispatcher() { +} + +SimpleDispatcher::~SimpleDispatcher() { +} + +void SimpleDispatcher::StateChangedNoLock() { + lock().AssertAcquired(); + waiter_list_.AwakeWaitersForStateChange(SatisfiedFlagsNoLock(), + SatisfiableFlagsNoLock()); +} + +void SimpleDispatcher::CancelAllWaitersNoLock() { + lock().AssertAcquired(); + waiter_list_.CancelAllWaiters(); +} + +MojoResult SimpleDispatcher::AddWaiterImplNoLock(Waiter* waiter, + MojoWaitFlags flags, + MojoResult wake_result) { + lock().AssertAcquired(); + + if ((flags & SatisfiedFlagsNoLock())) + return MOJO_RESULT_ALREADY_EXISTS; + if (!(flags & SatisfiableFlagsNoLock())) + return MOJO_RESULT_FAILED_PRECONDITION; + + waiter_list_.AddWaiter(waiter, flags, wake_result); + return MOJO_RESULT_OK; +} + +void SimpleDispatcher::RemoveWaiterImplNoLock(Waiter* waiter) { + lock().AssertAcquired(); + waiter_list_.RemoveWaiter(waiter); +} + +} // namespace system +} // namespace mojo |