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 #ifndef MOJO_SYSTEM_WAITER_LIST_H_ 6 #define MOJO_SYSTEM_WAITER_LIST_H_ 7 8 #include <list> 9 10 #include "base/basictypes.h" 11 #include "mojo/public/system/core.h" 12 #include "mojo/system/system_impl_export.h" 13 14 namespace mojo { 15 namespace system { 16 17 class Waiter; 18 19 // |WaiterList| tracks all the |Waiter|s that are waiting on a given 20 // handle/|Dispatcher|. There should be a |WaiterList| for each handle that can 21 // be waited on (in any way). In the simple case, the |WaiterList| is owned by 22 // the |Dispatcher|, whereas in more complex cases it is owned by the secondary 23 // object (see simple_dispatcher.* and the explanatory comment in core_impl.cc). 24 // This class is thread-unsafe (all concurrent access must be protected by some 25 // lock). 26 class MOJO_SYSTEM_IMPL_EXPORT WaiterList { 27 public: 28 WaiterList(); 29 ~WaiterList(); 30 31 void AwakeWaitersForStateChange(MojoWaitFlags satisfied_flags, 32 MojoWaitFlags satisfiable_flags); 33 void CancelAllWaiters(); 34 void AddWaiter(Waiter* waiter, MojoWaitFlags flags, MojoResult wake_result); 35 void RemoveWaiter(Waiter* waiter); 36 37 private: 38 struct WaiterInfo { 39 WaiterInfo(Waiter* waiter, MojoWaitFlags flags, MojoResult wake_result) 40 : waiter(waiter), flags(flags), wake_result(wake_result) {} 41 42 Waiter* waiter; 43 MojoWaitFlags flags; 44 MojoResult wake_result; 45 }; 46 typedef std::list<WaiterInfo> WaiterInfoList; 47 48 WaiterInfoList waiters_; 49 50 DISALLOW_COPY_AND_ASSIGN(WaiterList); 51 }; 52 53 } // namespace system 54 } // namespace mojo 55 56 #endif // MOJO_SYSTEM_WAITER_LIST_H_ 57