Index: mojo/system/waiter_list.h |
diff --git a/mojo/system/waiter_list.h b/mojo/system/waiter_list.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..23933e3f07bb6119d1b3693a29526009be87ee50 |
--- /dev/null |
+++ b/mojo/system/waiter_list.h |
@@ -0,0 +1,55 @@ |
+// 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. |
+ |
+#ifndef MOJO_SYSTEM_WAITER_LIST_H_ |
+#define MOJO_SYSTEM_WAITER_LIST_H_ |
+ |
+#include <list> |
+ |
+#include "base/basictypes.h" |
+#include "mojo/public/system/core.h" |
+ |
+namespace mojo { |
+namespace system { |
+ |
+class Waiter; |
+ |
+// |WaiterList| tracks all the |Waiter|s that are waiting on a given |
+// handle/|Dispatcher|. There should be a |WaiterList| for each handle that can |
+// be waited on (in any way). In the simple case, the |WaiterList| is owned by |
+// the |Dispatcher|, whereas in more complex cases it is owned by the secondary |
+// object (see simple_dispatcher.* and the explanatory comment in core_impl.cc). |
+// This class is thread-unsafe (all concurrent access must be protected by some |
+// lock). |
+class WaiterList { |
+ public: |
+ WaiterList(); |
+ ~WaiterList(); |
+ |
+ void AwakeWaitersForStateChange(MojoWaitFlags satisfied_flags, |
+ MojoWaitFlags satisfiable_flags); |
+ void CancelAllWaiters(); |
+ void AddWaiter(Waiter* waiter, MojoWaitFlags flags, MojoResult wake_result); |
+ void RemoveWaiter(Waiter* waiter); |
+ |
+ private: |
+ struct WaiterInfo { |
+ WaiterInfo(Waiter* waiter, MojoWaitFlags flags, MojoResult wake_result) |
+ : waiter(waiter), flags(flags), wake_result(wake_result) {} |
+ |
+ Waiter* waiter; |
+ MojoWaitFlags flags; |
+ MojoResult wake_result; |
+ }; |
+ typedef std::list<WaiterInfo> WaiterInfoList; |
+ |
+ WaiterInfoList waiters_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(WaiterList); |
+}; |
+ |
+} // namespace system |
+} // namespace mojo |
+ |
+#endif // MOJO_SYSTEM_WAITER_LIST_H_ |