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

Side by Side Diff: mojo/system/waiter_list_unittest.cc

Issue 336313007: Mojo: Rename MOJO_WAIT_FLAG_... -> MOJO_HANDLE_SIGNAL_.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « mojo/system/wait_flags_state.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // NOTE(vtl): Some of these tests are inherently flaky (e.g., if run on a 5 // NOTE(vtl): Some of these tests are inherently flaky (e.g., if run on a
6 // heavily-loaded system). Sorry. |test::EpsilonTimeout()| may be increased to 6 // heavily-loaded system). Sorry. |test::EpsilonTimeout()| may be increased to
7 // increase tolerance and reduce observed flakiness (though doing so reduces the 7 // increase tolerance and reduce observed flakiness (though doing so reduces the
8 // meaningfulness of the test). 8 // meaningfulness of the test).
9 9
10 #include "mojo/system/waiter_list.h" 10 #include "mojo/system/waiter_list.h"
(...skipping 11 matching lines...) Expand all
22 namespace { 22 namespace {
23 23
24 TEST(WaiterListTest, BasicCancel) { 24 TEST(WaiterListTest, BasicCancel) {
25 MojoResult result; 25 MojoResult result;
26 uint32_t context; 26 uint32_t context;
27 27
28 // Cancel immediately after thread start. 28 // Cancel immediately after thread start.
29 { 29 {
30 WaiterList waiter_list; 30 WaiterList waiter_list;
31 test::SimpleWaiterThread thread(&result, &context); 31 test::SimpleWaiterThread thread(&result, &context);
32 waiter_list.AddWaiter(thread.waiter(), MOJO_WAIT_FLAG_READABLE, 1); 32 waiter_list.AddWaiter(thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE, 1);
33 thread.Start(); 33 thread.Start();
34 waiter_list.CancelAllWaiters(); 34 waiter_list.CancelAllWaiters();
35 waiter_list.RemoveWaiter(thread.waiter()); // Double-remove okay. 35 waiter_list.RemoveWaiter(thread.waiter()); // Double-remove okay.
36 } // Join |thread|. 36 } // Join |thread|.
37 EXPECT_EQ(MOJO_RESULT_CANCELLED, result); 37 EXPECT_EQ(MOJO_RESULT_CANCELLED, result);
38 EXPECT_EQ(1u, context); 38 EXPECT_EQ(1u, context);
39 39
40 // Cancel before after thread start. 40 // Cancel before after thread start.
41 { 41 {
42 WaiterList waiter_list; 42 WaiterList waiter_list;
43 test::SimpleWaiterThread thread(&result, &context); 43 test::SimpleWaiterThread thread(&result, &context);
44 waiter_list.AddWaiter(thread.waiter(), MOJO_WAIT_FLAG_WRITABLE, 2); 44 waiter_list.AddWaiter(thread.waiter(), MOJO_HANDLE_SIGNAL_WRITABLE, 2);
45 waiter_list.CancelAllWaiters(); 45 waiter_list.CancelAllWaiters();
46 thread.Start(); 46 thread.Start();
47 } // Join |thread|. 47 } // Join |thread|.
48 EXPECT_EQ(MOJO_RESULT_CANCELLED, result); 48 EXPECT_EQ(MOJO_RESULT_CANCELLED, result);
49 EXPECT_EQ(2u, context); 49 EXPECT_EQ(2u, context);
50 50
51 // Cancel some time after thread start. 51 // Cancel some time after thread start.
52 { 52 {
53 WaiterList waiter_list; 53 WaiterList waiter_list;
54 test::SimpleWaiterThread thread(&result, &context); 54 test::SimpleWaiterThread thread(&result, &context);
55 waiter_list.AddWaiter(thread.waiter(), MOJO_WAIT_FLAG_READABLE, 3); 55 waiter_list.AddWaiter(thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE, 3);
56 thread.Start(); 56 thread.Start();
57 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); 57 base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
58 waiter_list.CancelAllWaiters(); 58 waiter_list.CancelAllWaiters();
59 } // Join |thread|. 59 } // Join |thread|.
60 EXPECT_EQ(MOJO_RESULT_CANCELLED, result); 60 EXPECT_EQ(MOJO_RESULT_CANCELLED, result);
61 EXPECT_EQ(3u, context); 61 EXPECT_EQ(3u, context);
62 } 62 }
63 63
64 TEST(WaiterListTest, BasicAwakeSatisfied) { 64 TEST(WaiterListTest, BasicAwakeSatisfied) {
65 MojoResult result; 65 MojoResult result;
66 uint32_t context; 66 uint32_t context;
67 67
68 // Awake immediately after thread start. 68 // Awake immediately after thread start.
69 { 69 {
70 WaiterList waiter_list; 70 WaiterList waiter_list;
71 test::SimpleWaiterThread thread(&result, &context); 71 test::SimpleWaiterThread thread(&result, &context);
72 waiter_list.AddWaiter(thread.waiter(), MOJO_WAIT_FLAG_READABLE, 1); 72 waiter_list.AddWaiter(thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE, 1);
73 thread.Start(); 73 thread.Start();
74 waiter_list.AwakeWaitersForStateChange( 74 waiter_list.AwakeWaitersForStateChange(
75 WaitFlagsState(MOJO_WAIT_FLAG_READABLE, 75 WaitFlagsState(MOJO_HANDLE_SIGNAL_READABLE,
76 MOJO_WAIT_FLAG_READABLE | MOJO_WAIT_FLAG_WRITABLE)); 76 MOJO_HANDLE_SIGNAL_READABLE |
77 MOJO_HANDLE_SIGNAL_WRITABLE));
77 waiter_list.RemoveWaiter(thread.waiter()); 78 waiter_list.RemoveWaiter(thread.waiter());
78 } // Join |thread|. 79 } // Join |thread|.
79 EXPECT_EQ(MOJO_RESULT_OK, result); 80 EXPECT_EQ(MOJO_RESULT_OK, result);
80 EXPECT_EQ(1u, context); 81 EXPECT_EQ(1u, context);
81 82
82 // Awake before after thread start. 83 // Awake before after thread start.
83 { 84 {
84 WaiterList waiter_list; 85 WaiterList waiter_list;
85 test::SimpleWaiterThread thread(&result, &context); 86 test::SimpleWaiterThread thread(&result, &context);
86 waiter_list.AddWaiter(thread.waiter(), MOJO_WAIT_FLAG_WRITABLE, 2); 87 waiter_list.AddWaiter(thread.waiter(), MOJO_HANDLE_SIGNAL_WRITABLE, 2);
87 waiter_list.AwakeWaitersForStateChange( 88 waiter_list.AwakeWaitersForStateChange(
88 WaitFlagsState(MOJO_WAIT_FLAG_WRITABLE, 89 WaitFlagsState(MOJO_HANDLE_SIGNAL_WRITABLE,
89 MOJO_WAIT_FLAG_READABLE | MOJO_WAIT_FLAG_WRITABLE)); 90 MOJO_HANDLE_SIGNAL_READABLE |
91 MOJO_HANDLE_SIGNAL_WRITABLE));
90 waiter_list.RemoveWaiter(thread.waiter()); 92 waiter_list.RemoveWaiter(thread.waiter());
91 waiter_list.RemoveWaiter(thread.waiter()); // Double-remove okay. 93 waiter_list.RemoveWaiter(thread.waiter()); // Double-remove okay.
92 thread.Start(); 94 thread.Start();
93 } // Join |thread|. 95 } // Join |thread|.
94 EXPECT_EQ(MOJO_RESULT_OK, result); 96 EXPECT_EQ(MOJO_RESULT_OK, result);
95 EXPECT_EQ(2u, context); 97 EXPECT_EQ(2u, context);
96 98
97 // Awake some time after thread start. 99 // Awake some time after thread start.
98 { 100 {
99 WaiterList waiter_list; 101 WaiterList waiter_list;
100 test::SimpleWaiterThread thread(&result, &context); 102 test::SimpleWaiterThread thread(&result, &context);
101 waiter_list.AddWaiter(thread.waiter(), MOJO_WAIT_FLAG_READABLE, 3); 103 waiter_list.AddWaiter(thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE, 3);
102 thread.Start(); 104 thread.Start();
103 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); 105 base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
104 waiter_list.AwakeWaitersForStateChange( 106 waiter_list.AwakeWaitersForStateChange(
105 WaitFlagsState(MOJO_WAIT_FLAG_READABLE, 107 WaitFlagsState(MOJO_HANDLE_SIGNAL_READABLE,
106 MOJO_WAIT_FLAG_READABLE | MOJO_WAIT_FLAG_WRITABLE)); 108 MOJO_HANDLE_SIGNAL_READABLE |
109 MOJO_HANDLE_SIGNAL_WRITABLE));
107 waiter_list.RemoveWaiter(thread.waiter()); 110 waiter_list.RemoveWaiter(thread.waiter());
108 } // Join |thread|. 111 } // Join |thread|.
109 EXPECT_EQ(MOJO_RESULT_OK, result); 112 EXPECT_EQ(MOJO_RESULT_OK, result);
110 EXPECT_EQ(3u, context); 113 EXPECT_EQ(3u, context);
111 } 114 }
112 115
113 TEST(WaiterListTest, BasicAwakeUnsatisfiable) { 116 TEST(WaiterListTest, BasicAwakeUnsatisfiable) {
114 MojoResult result; 117 MojoResult result;
115 uint32_t context; 118 uint32_t context;
116 119
117 // Awake (for unsatisfiability) immediately after thread start. 120 // Awake (for unsatisfiability) immediately after thread start.
118 { 121 {
119 WaiterList waiter_list; 122 WaiterList waiter_list;
120 test::SimpleWaiterThread thread(&result, &context); 123 test::SimpleWaiterThread thread(&result, &context);
121 waiter_list.AddWaiter(thread.waiter(), MOJO_WAIT_FLAG_READABLE, 1); 124 waiter_list.AddWaiter(thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE, 1);
122 thread.Start(); 125 thread.Start();
123 waiter_list.AwakeWaitersForStateChange( 126 waiter_list.AwakeWaitersForStateChange(
124 WaitFlagsState(MOJO_WAIT_FLAG_NONE, MOJO_WAIT_FLAG_WRITABLE)); 127 WaitFlagsState(MOJO_HANDLE_SIGNAL_NONE, MOJO_HANDLE_SIGNAL_WRITABLE));
125 waiter_list.RemoveWaiter(thread.waiter()); 128 waiter_list.RemoveWaiter(thread.waiter());
126 } // Join |thread|. 129 } // Join |thread|.
127 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result); 130 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result);
128 EXPECT_EQ(1u, context); 131 EXPECT_EQ(1u, context);
129 132
130 // Awake (for unsatisfiability) before after thread start. 133 // Awake (for unsatisfiability) before after thread start.
131 { 134 {
132 WaiterList waiter_list; 135 WaiterList waiter_list;
133 test::SimpleWaiterThread thread(&result, &context); 136 test::SimpleWaiterThread thread(&result, &context);
134 waiter_list.AddWaiter(thread.waiter(), MOJO_WAIT_FLAG_WRITABLE, 2); 137 waiter_list.AddWaiter(thread.waiter(), MOJO_HANDLE_SIGNAL_WRITABLE, 2);
135 waiter_list.AwakeWaitersForStateChange( 138 waiter_list.AwakeWaitersForStateChange(
136 WaitFlagsState(MOJO_WAIT_FLAG_READABLE, MOJO_WAIT_FLAG_READABLE)); 139 WaitFlagsState(MOJO_HANDLE_SIGNAL_READABLE,
140 MOJO_HANDLE_SIGNAL_READABLE));
137 waiter_list.RemoveWaiter(thread.waiter()); 141 waiter_list.RemoveWaiter(thread.waiter());
138 thread.Start(); 142 thread.Start();
139 } // Join |thread|. 143 } // Join |thread|.
140 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result); 144 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result);
141 EXPECT_EQ(2u, context); 145 EXPECT_EQ(2u, context);
142 146
143 // Awake (for unsatisfiability) some time after thread start. 147 // Awake (for unsatisfiability) some time after thread start.
144 { 148 {
145 WaiterList waiter_list; 149 WaiterList waiter_list;
146 test::SimpleWaiterThread thread(&result, &context); 150 test::SimpleWaiterThread thread(&result, &context);
147 waiter_list.AddWaiter(thread.waiter(), MOJO_WAIT_FLAG_READABLE, 3); 151 waiter_list.AddWaiter(thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE, 3);
148 thread.Start(); 152 thread.Start();
149 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); 153 base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
150 waiter_list.AwakeWaitersForStateChange( 154 waiter_list.AwakeWaitersForStateChange(
151 WaitFlagsState(MOJO_WAIT_FLAG_NONE, MOJO_WAIT_FLAG_WRITABLE)); 155 WaitFlagsState(MOJO_HANDLE_SIGNAL_NONE, MOJO_HANDLE_SIGNAL_WRITABLE));
152 waiter_list.RemoveWaiter(thread.waiter()); 156 waiter_list.RemoveWaiter(thread.waiter());
153 waiter_list.RemoveWaiter(thread.waiter()); // Double-remove okay. 157 waiter_list.RemoveWaiter(thread.waiter()); // Double-remove okay.
154 } // Join |thread|. 158 } // Join |thread|.
155 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result); 159 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result);
156 EXPECT_EQ(3u, context); 160 EXPECT_EQ(3u, context);
157 } 161 }
158 162
159 TEST(WaiterListTest, MultipleWaiters) { 163 TEST(WaiterListTest, MultipleWaiters) {
160 MojoResult result1; 164 MojoResult result1;
161 MojoResult result2; 165 MojoResult result2;
162 MojoResult result3; 166 MojoResult result3;
163 MojoResult result4; 167 MojoResult result4;
164 uint32_t context1; 168 uint32_t context1;
165 uint32_t context2; 169 uint32_t context2;
166 uint32_t context3; 170 uint32_t context3;
167 uint32_t context4; 171 uint32_t context4;
168 172
169 // Cancel two waiters. 173 // Cancel two waiters.
170 { 174 {
171 WaiterList waiter_list; 175 WaiterList waiter_list;
172 test::SimpleWaiterThread thread1(&result1, &context1); 176 test::SimpleWaiterThread thread1(&result1, &context1);
173 waiter_list.AddWaiter(thread1.waiter(), MOJO_WAIT_FLAG_READABLE, 1); 177 waiter_list.AddWaiter(thread1.waiter(), MOJO_HANDLE_SIGNAL_READABLE, 1);
174 thread1.Start(); 178 thread1.Start();
175 test::SimpleWaiterThread thread2(&result2, &context2); 179 test::SimpleWaiterThread thread2(&result2, &context2);
176 waiter_list.AddWaiter(thread2.waiter(), MOJO_WAIT_FLAG_WRITABLE, 2); 180 waiter_list.AddWaiter(thread2.waiter(), MOJO_HANDLE_SIGNAL_WRITABLE, 2);
177 thread2.Start(); 181 thread2.Start();
178 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); 182 base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
179 waiter_list.CancelAllWaiters(); 183 waiter_list.CancelAllWaiters();
180 } // Join threads. 184 } // Join threads.
181 EXPECT_EQ(MOJO_RESULT_CANCELLED, result1); 185 EXPECT_EQ(MOJO_RESULT_CANCELLED, result1);
182 EXPECT_EQ(1u, context1); 186 EXPECT_EQ(1u, context1);
183 EXPECT_EQ(MOJO_RESULT_CANCELLED, result2); 187 EXPECT_EQ(MOJO_RESULT_CANCELLED, result2);
184 EXPECT_EQ(2u, context2); 188 EXPECT_EQ(2u, context2);
185 189
186 // Awake one waiter, cancel other. 190 // Awake one waiter, cancel other.
187 { 191 {
188 WaiterList waiter_list; 192 WaiterList waiter_list;
189 test::SimpleWaiterThread thread1(&result1, &context1); 193 test::SimpleWaiterThread thread1(&result1, &context1);
190 waiter_list.AddWaiter(thread1.waiter(), MOJO_WAIT_FLAG_READABLE, 3); 194 waiter_list.AddWaiter(thread1.waiter(), MOJO_HANDLE_SIGNAL_READABLE, 3);
191 thread1.Start(); 195 thread1.Start();
192 test::SimpleWaiterThread thread2(&result2, &context2); 196 test::SimpleWaiterThread thread2(&result2, &context2);
193 waiter_list.AddWaiter(thread2.waiter(), MOJO_WAIT_FLAG_WRITABLE, 4); 197 waiter_list.AddWaiter(thread2.waiter(), MOJO_HANDLE_SIGNAL_WRITABLE, 4);
194 thread2.Start(); 198 thread2.Start();
195 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); 199 base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
196 waiter_list.AwakeWaitersForStateChange( 200 waiter_list.AwakeWaitersForStateChange(
197 WaitFlagsState(MOJO_WAIT_FLAG_READABLE, 201 WaitFlagsState(MOJO_HANDLE_SIGNAL_READABLE,
198 MOJO_WAIT_FLAG_READABLE | MOJO_WAIT_FLAG_WRITABLE)); 202 MOJO_HANDLE_SIGNAL_READABLE |
203 MOJO_HANDLE_SIGNAL_WRITABLE));
199 waiter_list.RemoveWaiter(thread1.waiter()); 204 waiter_list.RemoveWaiter(thread1.waiter());
200 waiter_list.CancelAllWaiters(); 205 waiter_list.CancelAllWaiters();
201 } // Join threads. 206 } // Join threads.
202 EXPECT_EQ(MOJO_RESULT_OK, result1); 207 EXPECT_EQ(MOJO_RESULT_OK, result1);
203 EXPECT_EQ(3u, context1); 208 EXPECT_EQ(3u, context1);
204 EXPECT_EQ(MOJO_RESULT_CANCELLED, result2); 209 EXPECT_EQ(MOJO_RESULT_CANCELLED, result2);
205 EXPECT_EQ(4u, context2); 210 EXPECT_EQ(4u, context2);
206 211
207 // Cancel one waiter, awake other for unsatisfiability. 212 // Cancel one waiter, awake other for unsatisfiability.
208 { 213 {
209 WaiterList waiter_list; 214 WaiterList waiter_list;
210 test::SimpleWaiterThread thread1(&result1, &context1); 215 test::SimpleWaiterThread thread1(&result1, &context1);
211 waiter_list.AddWaiter(thread1.waiter(), MOJO_WAIT_FLAG_READABLE, 5); 216 waiter_list.AddWaiter(thread1.waiter(), MOJO_HANDLE_SIGNAL_READABLE, 5);
212 thread1.Start(); 217 thread1.Start();
213 test::SimpleWaiterThread thread2(&result2, &context2); 218 test::SimpleWaiterThread thread2(&result2, &context2);
214 waiter_list.AddWaiter(thread2.waiter(), MOJO_WAIT_FLAG_WRITABLE, 6); 219 waiter_list.AddWaiter(thread2.waiter(), MOJO_HANDLE_SIGNAL_WRITABLE, 6);
215 thread2.Start(); 220 thread2.Start();
216 base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); 221 base::PlatformThread::Sleep(2 * test::EpsilonTimeout());
217 waiter_list.AwakeWaitersForStateChange( 222 waiter_list.AwakeWaitersForStateChange(
218 WaitFlagsState(MOJO_WAIT_FLAG_NONE, MOJO_WAIT_FLAG_READABLE)); 223 WaitFlagsState(MOJO_HANDLE_SIGNAL_NONE, MOJO_HANDLE_SIGNAL_READABLE));
219 waiter_list.RemoveWaiter(thread2.waiter()); 224 waiter_list.RemoveWaiter(thread2.waiter());
220 waiter_list.CancelAllWaiters(); 225 waiter_list.CancelAllWaiters();
221 } // Join threads. 226 } // Join threads.
222 EXPECT_EQ(MOJO_RESULT_CANCELLED, result1); 227 EXPECT_EQ(MOJO_RESULT_CANCELLED, result1);
223 EXPECT_EQ(5u, context1); 228 EXPECT_EQ(5u, context1);
224 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result2); 229 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result2);
225 EXPECT_EQ(6u, context2); 230 EXPECT_EQ(6u, context2);
226 231
227 // Cancel one waiter, awake other for unsatisfiability. 232 // Cancel one waiter, awake other for unsatisfiability.
228 { 233 {
229 WaiterList waiter_list; 234 WaiterList waiter_list;
230 test::SimpleWaiterThread thread1(&result1, &context1); 235 test::SimpleWaiterThread thread1(&result1, &context1);
231 waiter_list.AddWaiter(thread1.waiter(), MOJO_WAIT_FLAG_READABLE, 7); 236 waiter_list.AddWaiter(thread1.waiter(), MOJO_HANDLE_SIGNAL_READABLE, 7);
232 thread1.Start(); 237 thread1.Start();
233 238
234 base::PlatformThread::Sleep(1 * test::EpsilonTimeout()); 239 base::PlatformThread::Sleep(1 * test::EpsilonTimeout());
235 240
236 // Should do nothing. 241 // Should do nothing.
237 waiter_list.AwakeWaitersForStateChange( 242 waiter_list.AwakeWaitersForStateChange(
238 WaitFlagsState(MOJO_WAIT_FLAG_NONE, 243 WaitFlagsState(MOJO_HANDLE_SIGNAL_NONE,
239 MOJO_WAIT_FLAG_READABLE | MOJO_WAIT_FLAG_WRITABLE)); 244 MOJO_HANDLE_SIGNAL_READABLE |
245 MOJO_HANDLE_SIGNAL_WRITABLE));
240 246
241 test::SimpleWaiterThread thread2(&result2, &context2); 247 test::SimpleWaiterThread thread2(&result2, &context2);
242 waiter_list.AddWaiter(thread2.waiter(), MOJO_WAIT_FLAG_WRITABLE, 8); 248 waiter_list.AddWaiter(thread2.waiter(), MOJO_HANDLE_SIGNAL_WRITABLE, 8);
243 thread2.Start(); 249 thread2.Start();
244 250
245 base::PlatformThread::Sleep(1 * test::EpsilonTimeout()); 251 base::PlatformThread::Sleep(1 * test::EpsilonTimeout());
246 252
247 // Awake #1. 253 // Awake #1.
248 waiter_list.AwakeWaitersForStateChange( 254 waiter_list.AwakeWaitersForStateChange(
249 WaitFlagsState(MOJO_WAIT_FLAG_READABLE, 255 WaitFlagsState(MOJO_HANDLE_SIGNAL_READABLE,
250 MOJO_WAIT_FLAG_READABLE | MOJO_WAIT_FLAG_WRITABLE)); 256 MOJO_HANDLE_SIGNAL_READABLE |
257 MOJO_HANDLE_SIGNAL_WRITABLE));
251 waiter_list.RemoveWaiter(thread1.waiter()); 258 waiter_list.RemoveWaiter(thread1.waiter());
252 259
253 base::PlatformThread::Sleep(1 * test::EpsilonTimeout()); 260 base::PlatformThread::Sleep(1 * test::EpsilonTimeout());
254 261
255 test::SimpleWaiterThread thread3(&result3, &context3); 262 test::SimpleWaiterThread thread3(&result3, &context3);
256 waiter_list.AddWaiter(thread3.waiter(), MOJO_WAIT_FLAG_WRITABLE, 9); 263 waiter_list.AddWaiter(thread3.waiter(), MOJO_HANDLE_SIGNAL_WRITABLE, 9);
257 thread3.Start(); 264 thread3.Start();
258 265
259 test::SimpleWaiterThread thread4(&result4, &context4); 266 test::SimpleWaiterThread thread4(&result4, &context4);
260 waiter_list.AddWaiter(thread4.waiter(), MOJO_WAIT_FLAG_READABLE, 10); 267 waiter_list.AddWaiter(thread4.waiter(), MOJO_HANDLE_SIGNAL_READABLE, 10);
261 thread4.Start(); 268 thread4.Start();
262 269
263 base::PlatformThread::Sleep(1 * test::EpsilonTimeout()); 270 base::PlatformThread::Sleep(1 * test::EpsilonTimeout());
264 271
265 // Awake #2 and #3 for unsatisfiability. 272 // Awake #2 and #3 for unsatisfiability.
266 waiter_list.AwakeWaitersForStateChange( 273 waiter_list.AwakeWaitersForStateChange(
267 WaitFlagsState(MOJO_WAIT_FLAG_NONE, MOJO_WAIT_FLAG_READABLE)); 274 WaitFlagsState(MOJO_HANDLE_SIGNAL_NONE, MOJO_HANDLE_SIGNAL_READABLE));
268 waiter_list.RemoveWaiter(thread2.waiter()); 275 waiter_list.RemoveWaiter(thread2.waiter());
269 waiter_list.RemoveWaiter(thread3.waiter()); 276 waiter_list.RemoveWaiter(thread3.waiter());
270 277
271 // Cancel #4. 278 // Cancel #4.
272 waiter_list.CancelAllWaiters(); 279 waiter_list.CancelAllWaiters();
273 } // Join threads. 280 } // Join threads.
274 EXPECT_EQ(MOJO_RESULT_OK, result1); 281 EXPECT_EQ(MOJO_RESULT_OK, result1);
275 EXPECT_EQ(7u, context1); 282 EXPECT_EQ(7u, context1);
276 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result2); 283 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result2);
277 EXPECT_EQ(8u, context2); 284 EXPECT_EQ(8u, context2);
278 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result3); 285 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result3);
279 EXPECT_EQ(9u, context3); 286 EXPECT_EQ(9u, context3);
280 EXPECT_EQ(MOJO_RESULT_CANCELLED, result4); 287 EXPECT_EQ(MOJO_RESULT_CANCELLED, result4);
281 EXPECT_EQ(10u, context4); 288 EXPECT_EQ(10u, context4);
282 } 289 }
283 290
284 } // namespace 291 } // namespace
285 } // namespace system 292 } // namespace system
286 } // namespace mojo 293 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/system/wait_flags_state.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698