| Index: mojo/public/cpp/system/wait_set.h
|
| diff --git a/mojo/public/cpp/system/wait_set.h b/mojo/public/cpp/system/wait_set.h
|
| index a7828f7c694c452124c338e9024190d87ac89145..5047a86a4809a8874b252514cc41cb87cb0017af 100644
|
| --- a/mojo/public/cpp/system/wait_set.h
|
| +++ b/mojo/public/cpp/system/wait_set.h
|
| @@ -14,24 +14,45 @@
|
| #include "mojo/public/cpp/system/handle.h"
|
| #include "mojo/public/cpp/system/system_export.h"
|
|
|
| +namespace base {
|
| +class WaitableEvent;
|
| +}
|
| +
|
| namespace mojo {
|
|
|
| // WaitSet provides an efficient means of blocking a thread on any number of
|
| -// Mojo handles changing state in some interesting way.
|
| +// events and Mojo handle state changes.
|
| //
|
| // Unlike WaitMany(), which incurs some extra setup cost for every call, a
|
| -// WaitSet maintains some persistent accounting of a set of handles which can be
|
| -// added or removed from the set. A blocking wait operation (see the Wait()
|
| -// method below) can then be performed multiple times for the same set of
|
| -// handles with minimal additional setup per call.
|
| +// WaitSet maintains some persistent accounting of the handles added or removed
|
| +// from the set. A blocking wait operation (see the Wait() method below) can
|
| +// then be performed multiple times for the same set of events and handles with
|
| +// minimal additional setup per call.
|
| //
|
| -// WaitSet is NOT thread-safe, so naturally handles may not be added to or
|
| -// removed from the set while waiting.
|
| +// WaitSet is NOT thread-safe, so naturally handles and events may not be added
|
| +// to or removed from the set while waiting.
|
| class MOJO_CPP_SYSTEM_EXPORT WaitSet {
|
| public:
|
| WaitSet();
|
| ~WaitSet();
|
|
|
| + // Adds |event| to the set of events to wait on. If successful, any future
|
| + // Wait() on this WaitSet will wake up if the event is signaled.
|
| + //
|
| + // |event| is not owned.
|
| + //
|
| + // Return values:
|
| + // |MOJO_RESULT_OK| if |event| has been successfully added.
|
| + // |MOJO_RESULT_ALREADY_EXISTS| if |event| is already in this WaitSet.
|
| + MojoResult AddEvent(base::WaitableEvent* event);
|
| +
|
| + // Removes |event| from the set of events to wait on.
|
| + //
|
| + // Return values:
|
| + // |MOJO_RESULT_OK| if |event| has been successfully added.
|
| + // |MOJO_RESULT_NOT_FOUND| if |event| was not in the set.
|
| + MojoResult RemoveEvent(base::WaitableEvent* event);
|
| +
|
| // Adds |handle| to the set of handles to wait on. If successful, any future
|
| // Wait() on this WaitSet will wake up in the event that one or more signals
|
| // in |signals| becomes satisfied on |handle| or all of them become
|
| @@ -51,8 +72,9 @@ class MOJO_CPP_SYSTEM_EXPORT WaitSet {
|
| // |MOJO_RESULT_NOT_FOUND| if |handle| was not in the set.
|
| MojoResult RemoveHandle(Handle handle);
|
|
|
| - // Waits on the current set of handles for one or more of them to meet the
|
| - // conditions which were specified when they were added via AddHandle() above.
|
| + // Waits on the current set of handles, waking up when one more of them meets
|
| + // the signaling conditions which were specified when they were added via
|
| + // AddHandle() above.
|
| //
|
| // |*num_ready_handles| on input must specify the number of entries available
|
| // for output storage in |ready_handles| and |ready_result| (which must both
|
| @@ -62,6 +84,12 @@ class MOJO_CPP_SYSTEM_EXPORT WaitSet {
|
| // Upon return, |*num_ready_handles| will contain the total number of handles
|
| // whose information is stored in the given output buffers.
|
| //
|
| + // If |ready_event| is non-null and the Wait() was unblocked by a user event
|
| + // signaling, the address of the event which signaled will be placed in
|
| + // |*ready_event|. Note that this is not necessarily exclusive to one or more
|
| + // handles also being ready. If |ready_event| is non-null and no user event
|
| + // was signaled for this Wait(), |*ready_event| will be null upon return.
|
| + //
|
| // Every entry in |ready_handles| on output corresponds to one of the handles
|
| // whose signaling state termianted the Wait() operation. Every corresponding
|
| // entry in |ready_results| indicates the status of a ready handle according
|
| @@ -75,7 +103,8 @@ class MOJO_CPP_SYSTEM_EXPORT WaitSet {
|
| // but referring to a different handle (i.e. has already been reused) by
|
| // the time Wait() returns. The handle in question is automatically
|
| // removed from the WaitSet.
|
| - void Wait(size_t* num_ready_handles,
|
| + void Wait(base::WaitableEvent** ready_event,
|
| + size_t* num_ready_handles,
|
| Handle* ready_handles,
|
| MojoResult* ready_results,
|
| MojoHandleSignalsState* signals_states = nullptr);
|
|
|