| 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 |