Index: mojo/edk/system/wait_set_dispatcher.h |
diff --git a/mojo/edk/system/wait_set_dispatcher.h b/mojo/edk/system/wait_set_dispatcher.h |
index a4d260622c68944fd69b5a9af06e82c648cb92b6..4abe723c50a4ea98498ba6be9596aed5cb75e41d 100644 |
--- a/mojo/edk/system/wait_set_dispatcher.h |
+++ b/mojo/edk/system/wait_set_dispatcher.h |
@@ -11,12 +11,12 @@ |
#include <map> |
#include <utility> |
+#include "base/macros.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/synchronization/lock.h" |
#include "mojo/edk/system/awakable_list.h" |
#include "mojo/edk/system/dispatcher.h" |
#include "mojo/edk/system/system_impl_export.h" |
-#include "mojo/public/cpp/system/macros.h" |
namespace mojo { |
namespace edk { |
@@ -25,8 +25,26 @@ class MOJO_SYSTEM_IMPL_EXPORT WaitSetDispatcher : public Dispatcher { |
public: |
WaitSetDispatcher(); |
- // |Dispatcher| public methods: |
+ // Dispatcher: |
Type GetType() const override; |
+ MojoResult Close() override; |
+ MojoResult AddWaitingDispatcher(const scoped_refptr<Dispatcher>& dispatcher, |
+ MojoHandleSignals signals, |
+ uintptr_t context) override; |
+ MojoResult RemoveWaitingDispatcher( |
+ const scoped_refptr<Dispatcher>& dispatcher) override; |
+ MojoResult GetReadyDispatchers(uint32_t* count, |
+ DispatcherVector* dispatchers, |
+ MojoResult* results, |
+ uintptr_t* contexts) override; |
+ HandleSignalsState GetHandleSignalsState() const override; |
+ MojoResult AddAwakable(Awakable* awakable, |
+ MojoHandleSignals signals, |
+ uintptr_t context, |
+ HandleSignalsState* signals_state) override; |
+ void RemoveAwakable(Awakable* awakable, |
+ HandleSignalsState* signals_state) override; |
+ bool BeginTransit() override; |
private: |
// Internal implementation of Awakable. |
@@ -43,38 +61,21 @@ class MOJO_SYSTEM_IMPL_EXPORT WaitSetDispatcher : public Dispatcher { |
~WaitSetDispatcher() override; |
- // |Dispatcher| protected methods: |
- void CloseImplNoLock() override; |
- void CancelAllAwakablesNoLock() override; |
- MojoResult AddAwakableImplNoLock(Awakable* awakable, |
- MojoHandleSignals signals, |
- uintptr_t context, |
- HandleSignalsState* signals_state) override; |
- void RemoveAwakableImplNoLock(Awakable* awakable, |
- HandleSignalsState* signals_state) override; |
- MojoResult AddWaitingDispatcherImplNoLock( |
- const scoped_refptr<Dispatcher>& dispatcher, |
- MojoHandleSignals signals, |
- uintptr_t context) override; |
- MojoResult RemoveWaitingDispatcherImplNoLock( |
- const scoped_refptr<Dispatcher>& dispatcher) override; |
- MojoResult GetReadyDispatchersImplNoLock(uint32_t* count, |
- DispatcherVector* dispatchers, |
- MojoResult* results, |
- uintptr_t* contexts) override; |
- HandleSignalsState GetHandleSignalsStateImplNoLock() const override; |
- scoped_refptr<Dispatcher> CreateEquivalentDispatcherAndCloseImplNoLock() |
- override; |
- |
// Signal that the dispatcher indexed by |context| has been woken up with |
// |result| and is now ready. |
void WakeDispatcher(MojoResult result, uintptr_t context); |
+ // Guards |is_closed_|, |waiting_dispatchers_|, and |waiter_|. |
Anand Mistry (off Chromium)
2016/01/28 02:26:25
nit: not |waiter_|, which doesn't need locking.
|
+ // |
+ // TODO: Consider removing this. |
+ base::Lock lock_; |
+ bool is_closed_ = false; |
+ |
// Map of dispatchers being waited on. Key is a Dispatcher* casted to a |
// uintptr_t, and should be treated as an opaque value and not casted back. |
std::map<uintptr_t, WaitState> waiting_dispatchers_; |
- // Separate lock that can be locked without locking |lock()|. |
+ // Separate lock that can be locked without locking |lock_|. |
mutable base::Lock awoken_lock_; |
// List of dispatchers that have been woken up. Any dispatcher in this queue |
// will NOT currently be waited on. |
@@ -82,13 +83,15 @@ class MOJO_SYSTEM_IMPL_EXPORT WaitSetDispatcher : public Dispatcher { |
// List of dispatchers that have been woken up and retrieved. |
std::deque<uintptr_t> processed_dispatchers_; |
- // Separate lock that can be locked without locking |lock()|. |
+ // Separate lock that can be locked without locking |lock_|. |
base::Lock awakable_lock_; |
// List of dispatchers being waited on. |
AwakableList awakable_list_; |
// Waiter used to wait on dispatchers. |
scoped_ptr<Waiter> waiter_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(WaitSetDispatcher); |
}; |
} // namespace edk |