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

Unified Diff: mojo/edk/system/wait_set_dispatcher.h

Issue 1585493002: [mojo] Ports EDK (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months 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/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

Powered by Google App Engine
This is Rietveld 408576698