Index: mojo/edk/system/dispatcher.h |
diff --git a/mojo/edk/system/dispatcher.h b/mojo/edk/system/dispatcher.h |
index 9dca67fa45f800d45231cb7a3c1e1718c0261c5e..88a9de7c8509dda9969bb8bc8fe49fd4ff10aa17 100644 |
--- a/mojo/edk/system/dispatcher.h |
+++ b/mojo/edk/system/dispatcher.h |
@@ -20,7 +20,7 @@ |
#include "mojo/edk/system/handle_signals_state.h" |
#include "mojo/edk/system/ports/name.h" |
#include "mojo/edk/system/system_impl_export.h" |
-#include "mojo/edk/system/watcher.h" |
+#include "mojo/edk/system/watch.h" |
#include "mojo/public/c/system/buffer.h" |
#include "mojo/public/c/system/data_pipe.h" |
#include "mojo/public/c/system/message_pipe.h" |
@@ -57,6 +57,7 @@ class MOJO_SYSTEM_IMPL_EXPORT Dispatcher |
DATA_PIPE_CONSUMER, |
SHARED_BUFFER, |
WAIT_SET, |
+ WATCHER, |
// "Private" types (not exposed via the public interface): |
PLATFORM_HANDLE = -1, |
@@ -67,13 +68,16 @@ class MOJO_SYSTEM_IMPL_EXPORT Dispatcher |
virtual Type GetType() const = 0; |
virtual MojoResult Close() = 0; |
- ///////////// Watch API //////////////////// |
- |
- virtual MojoResult Watch(MojoHandleSignals signals, |
- const Watcher::WatchCallback& callback, |
- uintptr_t context); |
+ ///////////// Watcher API //////////////////// |
+ virtual MojoResult WatchDispatcher(scoped_refptr<Dispatcher> dispatcher, |
+ MojoHandleSignals signals, |
+ uintptr_t context); |
virtual MojoResult CancelWatch(uintptr_t context); |
+ virtual MojoResult Arm(uint32_t* num_ready_contexts, |
+ uintptr_t* ready_contexts, |
+ MojoResult* ready_results, |
+ MojoHandleSignalsState* ready_signals_states); |
///////////// Message pipe API ///////////// |
@@ -158,6 +162,18 @@ class MOJO_SYSTEM_IMPL_EXPORT Dispatcher |
// threads. |
virtual HandleSignalsState GetHandleSignalsState() const; |
+ // Adds a WatcherDispatcher reference to this dispatcher, to be notified of |
+ // all subsequent changes to handle state including signal changes or closure. |
+ // The reference is associated with a |context| for disambiguation of |
+ // removals. |
+ virtual MojoResult AddWatcherRef( |
+ const scoped_refptr<WatcherDispatcher>& watcher, |
+ uintptr_t context); |
+ |
+ // Removes a WatcherDispatcher reference from this dispatcher. |
+ virtual MojoResult RemoveWatcherRef(WatcherDispatcher* watcher, |
+ uintptr_t context); |
+ |
// Adds an awakable to this dispatcher, which will be woken up when this |
// object changes state to satisfy |signals| with context |context|. It will |
// also be woken up when it becomes impossible for the object to ever satisfy |