Index: mojo/edk/system/dispatcher.h |
diff --git a/mojo/edk/system/dispatcher.h b/mojo/edk/system/dispatcher.h |
index 24a59203e6a5dd7336824e7945632d107e0ea913..db27ec879b5a7933ec8c92f3affc2f69636e59bd 100644 |
--- a/mojo/edk/system/dispatcher.h |
+++ b/mojo/edk/system/dispatcher.h |
@@ -98,7 +98,13 @@ class Dispatcher : public util::RefCountedThreadSafe<Dispatcher> { |
// NOTE(vtl): This puts a big lock around each dispatcher (i.e., handle), and |
// prevents the various |...ImplNoLock()|s from releasing the lock as soon as |
// possible. If this becomes an issue, we can rethink this. |
+ |
+ // No |EntrypointClass|: |
+ // All dispatchers must support this. |
MojoResult Close(); |
+ // This actually supports |MojoDuplicateHandle[WithReducedRights]()|; rights |
+ // are handled by |Core|. |
+ MojoResult DuplicateDispatcher(util::RefPtr<Dispatcher>* new_dispatcher); |
// |EntrypointClass::MESSAGE_PIPE|: |
// |transports| may be non-null if and only if there are handles to be |
@@ -262,6 +268,12 @@ class Dispatcher : public util::RefCountedThreadSafe<Dispatcher> { |
virtual void CancelAllAwakablesNoLock() MOJO_EXCLUSIVE_LOCKS_REQUIRED(mutex_); |
virtual void CloseImplNoLock() MOJO_EXCLUSIVE_LOCKS_REQUIRED(mutex_); |
+ // All dispatcher types whose handles may ever have the |
+ // |MOJO_HANDLE_RIGHT_DUPLICATE| right must override this. |
+ virtual MojoResult DuplicateDispatcherImplNoLock( |
+ util::RefPtr<Dispatcher>* new_dispatcher) |
+ MOJO_EXCLUSIVE_LOCKS_REQUIRED(mutex_); |
+ |
// This is called by |CreateEquivalentDispatcherAndCloseNoLock()|. It should |
// "close" this dispatcher and return a new one equivalent to it. Note: |
// Probably the first thing an implementation should do is call |