OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 "vm/message_handler.h" | 5 #include "vm/message_handler.h" |
6 | 6 |
7 #include "vm/dart.h" | 7 #include "vm/dart.h" |
8 #include "vm/lockers.h" | 8 #include "vm/lockers.h" |
9 #include "vm/os.h" | 9 #include "vm/os.h" |
10 #include "vm/port.h" | 10 #include "vm/port.h" |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 { | 242 { |
243 MonitorLocker ml(&monitor_); | 243 MonitorLocker ml(&monitor_); |
244 // Initialize the message handler by running its start function, | 244 // Initialize the message handler by running its start function, |
245 // if we have one. For an isolate, this will run the isolate's | 245 // if we have one. For an isolate, this will run the isolate's |
246 // main() function. | 246 // main() function. |
247 if (pause_on_start()) { | 247 if (pause_on_start()) { |
248 if (!paused_on_start_) { | 248 if (!paused_on_start_) { |
249 // Temporarily drop the lock when calling out to NotifyPauseOnStart. | 249 // Temporarily drop the lock when calling out to NotifyPauseOnStart. |
250 // This avoids a dead lock that can occur when this message handler | 250 // This avoids a dead lock that can occur when this message handler |
251 // tries to post a message while a message is being posted to it. | 251 // tries to post a message while a message is being posted to it. |
| 252 paused_on_start_ = true; |
| 253 paused_timestamp_ = OS::GetCurrentTimeMillis(); |
252 monitor_.Exit(); | 254 monitor_.Exit(); |
253 NotifyPauseOnStart(); | 255 NotifyPauseOnStart(); |
254 monitor_.Enter(); | 256 monitor_.Enter(); |
255 paused_on_start_ = true; | |
256 paused_timestamp_ = OS::GetCurrentTimeMillis(); | |
257 } | 257 } |
258 HandleMessages(false, false); | 258 HandleMessages(false, false); |
259 if (pause_on_start()) { | 259 if (pause_on_start()) { |
260 // Still paused. | 260 // Still paused. |
261 task_ = NULL; // No task in queue. | 261 task_ = NULL; // No task in queue. |
262 return; | 262 return; |
263 } else { | 263 } else { |
264 paused_on_start_ = false; | 264 paused_on_start_ = false; |
265 paused_timestamp_ = -1; | 265 paused_timestamp_ = -1; |
266 } | 266 } |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 | 388 |
389 | 389 |
390 void MessageHandler::AcquireQueues(AcquiredQueues* acquired_queues) { | 390 void MessageHandler::AcquireQueues(AcquiredQueues* acquired_queues) { |
391 ASSERT(acquired_queues != NULL); | 391 ASSERT(acquired_queues != NULL); |
392 // No double dipping. | 392 // No double dipping. |
393 ASSERT(acquired_queues->handler_ == NULL); | 393 ASSERT(acquired_queues->handler_ == NULL); |
394 acquired_queues->Reset(this); | 394 acquired_queues->Reset(this); |
395 } | 395 } |
396 | 396 |
397 } // namespace dart | 397 } // namespace dart |
OLD | NEW |