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

Unified Diff: mojo/system/dispatcher.h

Issue 66963005: Mojo: Implement local passing of MessagePipes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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/system/dispatcher.h
diff --git a/mojo/system/dispatcher.h b/mojo/system/dispatcher.h
index abd1ed1804211ccc80b981521059d6144610a8cb..d207b977c07802c8682aa4d0f2b55b1aee93b611 100644
--- a/mojo/system/dispatcher.h
+++ b/mojo/system/dispatcher.h
@@ -42,13 +42,13 @@ class MOJO_SYSTEM_EXPORT Dispatcher :
MojoResult WriteMessage(const void* bytes, uint32_t num_bytes,
const std::vector<Dispatcher*>* dispatchers,
MojoWriteMessageFlags flags);
- // |dispatchers| must be non-null but empty, if |max_num_dispatchers| is
- // nonzero. On success, it will be set to the dispatchers to be received (and
- // assigned handles) as part of the message.
+ // |dispatchers| must be non-null but empty, if |num_dispatchers| is non-null
+ // and nonzero. On success, it will be set to the dispatchers to be received
+ // (and assigned handles) as part of the message.
MojoResult ReadMessage(
void* bytes, uint32_t* num_bytes,
- uint32_t max_num_dispatchers,
std::vector<scoped_refptr<Dispatcher> >* dispatchers,
+ uint32_t* num_dispatchers,
MojoReadMessageFlags flags);
// Adds a waiter to this dispatcher. The waiter will be woken up when this
@@ -74,6 +74,13 @@ class MOJO_SYSTEM_EXPORT Dispatcher :
friend class base::RefCountedThreadSafe<Dispatcher>;
virtual ~Dispatcher();
+ // Creates an equivalent dispatcher -- representing the same resource as this
+ // dispatcher -- and close (i.e., disable) this dispatcher. I.e., this
+ // dispatcher will look as though it was closed, but the resource it
+ // represents will be assigned to the new dispatcher. This must be called
+ // under the dispatcher's lock.
+ scoped_refptr<Dispatcher> CreateEquivalentDispatcherAndCloseNoLock();
+
// These are to be overridden by subclasses (if necessary). They are called
// exactly once -- first |CancelAllWaitersNoLock()|, then |CloseImplNoLock()|,
// when the dispatcher is being closed. They are called under |lock_|.
@@ -90,20 +97,29 @@ class MOJO_SYSTEM_EXPORT Dispatcher :
MojoWriteMessageFlags flags);
virtual MojoResult ReadMessageImplNoLock(
void* bytes, uint32_t* num_bytes,
- uint32_t max_num_dispatchers,
std::vector<scoped_refptr<Dispatcher> >* dispatchers,
+ uint32_t* num_dispatchers,
MojoReadMessageFlags flags);
virtual MojoResult AddWaiterImplNoLock(Waiter* waiter,
MojoWaitFlags flags,
MojoResult wake_result);
virtual void RemoveWaiterImplNoLock(Waiter* waiter);
+ // This must be implemented by subclasses, since only they can instantiate a
+ // new dispatcher of the same class. See
+ // |CreateEquivalentDispatcherAndCloseNoLock()| for more details.
+ virtual scoped_refptr<Dispatcher>
+ CreateEquivalentDispatcherAndCloseImplNoLock() = 0;
+
// Available to subclasses. (Note: Returns a non-const reference, just like
- // |base::AutoLock|'s constructor takes a non-const reference.
+ // |base::AutoLock|'s constructor takes a non-const reference.)
base::Lock& lock() const { return lock_; }
+ bool is_closed_no_lock() const { return is_closed_; }
+
private:
- // For |WriteMessage()|, |CoreImpl| needs access to |lock()|.
+ // For |WriteMessage()|, |CoreImpl| needs access to |lock()| and
+ // |is_closed_no_lock()|.
friend class CoreImpl;
// This protects the following members as well as any state added by

Powered by Google App Engine
This is Rietveld 408576698