OLD | NEW |
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 Loading... |
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 |
OLD | NEW |