Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1892)

Unified Diff: mojo/edk/system/awakable_list.cc

Issue 782693004: Update mojo sdk to rev f6c8ec07c01deebc13178d516225fd12695c3dc2 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: hack mojo_system_impl gypi for android :| Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/edk/system/awakable_list.cc
diff --git a/mojo/edk/system/awakable_list.cc b/mojo/edk/system/awakable_list.cc
new file mode 100644
index 0000000000000000000000000000000000000000..6af305b4420e2799ede060085e9ae914c03d22e4
--- /dev/null
+++ b/mojo/edk/system/awakable_list.cc
@@ -0,0 +1,58 @@
+// 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/edk/system/awakable_list.h"
+
+#include "base/logging.h"
+#include "mojo/edk/system/awakable.h"
+#include "mojo/edk/system/handle_signals_state.h"
+
+namespace mojo {
+namespace system {
+
+AwakableList::AwakableList() {
+}
+
+AwakableList::~AwakableList() {
+ DCHECK(awakables_.empty());
+}
+
+void AwakableList::AwakeForStateChange(const HandleSignalsState& state) {
+ for (AwakeInfoList::iterator it = awakables_.begin(); it != awakables_.end();
+ ++it) {
+ if (state.satisfies(it->signals))
+ it->awakable->Awake(MOJO_RESULT_OK, it->context);
+ else if (!state.can_satisfy(it->signals))
+ it->awakable->Awake(MOJO_RESULT_FAILED_PRECONDITION, it->context);
+ }
+}
+
+void AwakableList::CancelAll() {
+ for (AwakeInfoList::iterator it = awakables_.begin(); it != awakables_.end();
+ ++it) {
+ it->awakable->Awake(MOJO_RESULT_CANCELLED, it->context);
+ }
+ awakables_.clear();
+}
+
+void AwakableList::Add(Awakable* awakable,
+ MojoHandleSignals signals,
+ uint32_t context) {
+ awakables_.push_back(AwakeInfo(awakable, signals, context));
+}
+
+void AwakableList::Remove(Awakable* awakable) {
+ // We allow a thread to wait on the same handle multiple times simultaneously,
+ // so we need to scan the entire list and remove all occurrences of |waiter|.
+ for (AwakeInfoList::iterator it = awakables_.begin();
+ it != awakables_.end();) {
+ AwakeInfoList::iterator maybe_delete = it;
+ ++it;
+ if (maybe_delete->awakable == awakable)
+ awakables_.erase(maybe_delete);
+ }
+}
+
+} // namespace system
+} // namespace mojo

Powered by Google App Engine
This is Rietveld 408576698