| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "platform/assert.h" | 5 #include "platform/assert.h" |
| 6 #include "vm/message.h" | 6 #include "vm/message.h" |
| 7 #include "vm/unit_test.h" | 7 #include "vm/unit_test.h" |
| 8 | 8 |
| 9 namespace dart { | 9 namespace dart { |
| 10 | 10 |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 MonitorLocker ml(sync); | 123 MonitorLocker ml(sync); |
| 124 ml.Notify(); | 124 ml.Notify(); |
| 125 } | 125 } |
| 126 | 126 |
| 127 // Wait for the other thread to fill the queue a bit. | 127 // Wait for the other thread to fill the queue a bit. |
| 128 while (!peer.HasMessage()) { | 128 while (!peer.HasMessage()) { |
| 129 MonitorLocker ml(sync); | 129 MonitorLocker ml(sync); |
| 130 ml.Wait(5); | 130 ml.Wait(5); |
| 131 } | 131 } |
| 132 | 132 |
| 133 for (int i = 0; i < 3; i++) { | 133 int i = 0; |
| 134 while (i < 3) { |
| 134 Message* msg = queue->Dequeue(0); | 135 Message* msg = queue->Dequeue(0); |
| 135 EXPECT(msg != NULL); | 136 // Dequeue(0) can return NULL due to spurious wakeup. |
| 136 EXPECT_EQ(i + 10, msg->dest_port()); | 137 if (msg != NULL) { |
| 137 EXPECT_EQ(i + 100, msg->reply_port()); | 138 EXPECT_EQ(i + 10, msg->dest_port()); |
| 138 EXPECT_EQ(i + 1000, *(reinterpret_cast<int*>(msg->data()))); | 139 EXPECT_EQ(i + 100, msg->reply_port()); |
| 139 delete msg; | 140 EXPECT_EQ(i + 1000, *(reinterpret_cast<int*>(msg->data()))); |
| 141 delete msg; |
| 142 i++; |
| 143 } |
| 140 } | 144 } |
| 141 for (int i = 0; i < 3; i++) { | 145 |
| 146 i = 0; |
| 147 while (i < 3) { |
| 142 Message* msg = queue->Dequeue(0); | 148 Message* msg = queue->Dequeue(0); |
| 143 EXPECT(msg != NULL); | 149 // Dequeue(0) can return NULL due to spurious wakeup. |
| 144 EXPECT_EQ(i + 20, msg->dest_port()); | 150 if (msg != NULL) { |
| 145 EXPECT_EQ(i + 200, msg->reply_port()); | 151 EXPECT_EQ(i + 20, msg->dest_port()); |
| 146 EXPECT_EQ(i + 2000, *(reinterpret_cast<int*>(msg->data()))); | 152 EXPECT_EQ(i + 200, msg->reply_port()); |
| 147 delete msg; | 153 EXPECT_EQ(i + 2000, *(reinterpret_cast<int*>(msg->data()))); |
| 154 delete msg; |
| 155 i++; |
| 156 } |
| 148 } | 157 } |
| 149 shared_queue = NULL; | 158 shared_queue = NULL; |
| 150 delete queue; | 159 delete queue; |
| 151 Dart::ShutdownIsolate(); | 160 Dart::ShutdownIsolate(); |
| 152 } | 161 } |
| 153 | 162 |
| 154 | 163 |
| 155 TEST_CASE(MessageQueue_WaitNotify) { | 164 TEST_CASE(MessageQueue_WaitNotify) { |
| 156 sync = new Monitor(); | 165 sync = new Monitor(); |
| 157 | 166 |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 280 Dart_Port port1 = 1; | 289 Dart_Port port1 = 1; |
| 281 | 290 |
| 282 EXPECT(!queue_peer.HasMessage()); | 291 EXPECT(!queue_peer.HasMessage()); |
| 283 queue.Flush(port1); | 292 queue.Flush(port1); |
| 284 | 293 |
| 285 // Queue is still empty. | 294 // Queue is still empty. |
| 286 EXPECT(!queue_peer.HasMessage()); | 295 EXPECT(!queue_peer.HasMessage()); |
| 287 } | 296 } |
| 288 | 297 |
| 289 } // namespace dart | 298 } // namespace dart |
| OLD | NEW |