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

Side by Side Diff: mojo/public/cpp/system/wait_set.h

Issue 2744943002: Mojo: Move waiting APIs to public library (Closed)
Patch Set: . Created 3 years, 9 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 unified diff | Download patch
« no previous file with comments | « mojo/public/cpp/system/wait.cc ('k') | mojo/public/cpp/system/wait_set.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef MOJO_PUBLIC_CPP_SYSTEM_WAIT_SET_H_
6 #define MOJO_PUBLIC_CPP_SYSTEM_WAIT_SET_H_
7
8 #include <stddef.h>
9 #include <stdint.h>
10
11 #include "base/macros.h"
12 #include "base/memory/ref_counted.h"
13 #include "mojo/public/c/system/types.h"
14 #include "mojo/public/cpp/system/handle.h"
15 #include "mojo/public/cpp/system/system_export.h"
16
17 namespace mojo {
18
19 // WaitSet provides an efficient means of blocking a thread on any number of
20 // Mojo handles changing state in some interesting way.
21 //
22 // Unlike WaitMany(), which incurs some extra setup cost for every call, a
23 // WaitSet maintains some persistent accounting of a set of handles which can be
24 // added or removed from the set. A blocking wait operation (see the Wait()
25 // method below) can then be performed multiple times for the same set of
26 // handles with minimal additional setup per call.
27 //
28 // WaitSet is NOT thread-safe, so naturally handles may not be added to or
29 // removed from the set while waiting.
30 class MOJO_CPP_SYSTEM_EXPORT WaitSet {
31 public:
32 WaitSet();
33 ~WaitSet();
34
35 // Adds |handle| to the set of handles to wait on. If successful, any future
36 // Wait() on this WaitSet will wake up in the event that one or more signals
37 // in |signals| becomes satisfied on |handle| or all of them become
38 // permanently unsatisfiable.
39 //
40 // Return values:
41 // |MOJO_RESULT_OK| if |handle| has been successfully added.
42 // |MOJO_RESULT_ALREADY_EXISTS| if |handle| is already in this WaitSet.
43 // |MOJO_RESULT_INVALID_ARGUMENT| if |handle| is not a valid handle.
44 MojoResult AddHandle(Handle handle, MojoHandleSignals signals);
45
46 // Removes |handle| from the set of handles to wait on. Future calls to
47 // Wait() will be unaffected by the state of this handle.
48 //
49 // Return values:
50 // |MOJO_RESULT_OK| if |handle| has been successfully removed.
51 // |MOJO_RESULT_NOT_FOUND| if |handle| was not in the set.
52 MojoResult RemoveHandle(Handle handle);
53
54 // Waits on the current set of handles for one or more of them to meet the
55 // conditions which were specified when they were added via AddHandle() above.
56 //
57 // |*num_ready_handles| on input must specify the number of entries available
58 // for output storage in |ready_handles| and |ready_result| (which must both
59 // be non-null). If |signals_states| is non-null it must also point to enough
60 // storage for |*num_ready_handles| MojoHandleSignalsState structures.
61 //
62 // Upon return, |*num_ready_handles| will contain the total number of handles
63 // whose information is stored in the given output buffers.
64 //
65 // Every entry in |ready_handles| on output corresponds to one of the handles
66 // whose signaling state termianted the Wait() operation. Every corresponding
67 // entry in |ready_results| indicates the status of a ready handle according
68 // to the following result codes:
69 // |MOJO_RESULT_OK| one or more signals for the handle has been satisfied.
70 // |MOJO_RESULT_FAILED_PRECONDITION| all of the signals for the handle have
71 // become permanently unsatisfiable.
72 // |MOJO_RESULT_CANCELLED| if the handle has been closed from another
73 // thread. NOTE: It is important to recognize that this means the
74 // corresponding value in |ready_handles| is either invalid, or valid
75 // but referring to a different handle (i.e. has already been reused) by
76 // the time Wait() returns. The handle in question is automatically
77 // removed from the WaitSet.
78 void Wait(size_t* num_ready_handles,
79 Handle* ready_handles,
80 MojoResult* ready_results,
81 MojoHandleSignalsState* signals_states = nullptr);
82
83 private:
84 class State;
85
86 // Thread-safe state associated with this WaitSet. Used to aggregate
87 // notifications from watched handles.
88 scoped_refptr<State> state_;
89
90 DISALLOW_COPY_AND_ASSIGN(WaitSet);
91 };
92
93 } // namespace mojo
94
95 #endif // MOJO_PUBLIC_CPP_SYSTEM_WAIT_SET_H_
OLDNEW
« no previous file with comments | « mojo/public/cpp/system/wait.cc ('k') | mojo/public/cpp/system/wait_set.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698