OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 "include/dart_api.h" | 5 #include "include/dart_api.h" |
6 #include "include/dart_mirrors_api.h" | 6 #include "include/dart_mirrors_api.h" |
7 #include "include/dart_native_api.h" | 7 #include "include/dart_native_api.h" |
8 | 8 |
9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
10 #include "lib/stacktrace.h" | 10 #include "lib/stacktrace.h" |
(...skipping 1592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1603 ml.Notify(); | 1603 ml.Notify(); |
1604 } | 1604 } |
1605 | 1605 |
1606 | 1606 |
1607 DART_EXPORT Dart_Handle Dart_RunLoop() { | 1607 DART_EXPORT Dart_Handle Dart_RunLoop() { |
1608 Thread* T = Thread::Current(); | 1608 Thread* T = Thread::Current(); |
1609 Isolate* I = T->isolate(); | 1609 Isolate* I = T->isolate(); |
1610 CHECK_API_SCOPE(T); | 1610 CHECK_API_SCOPE(T); |
1611 CHECK_CALLBACK_STATE(T); | 1611 CHECK_CALLBACK_STATE(T); |
1612 API_TIMELINE_BEGIN_END; | 1612 API_TIMELINE_BEGIN_END; |
1613 Monitor monitor; | 1613 // The message handler run loop does not expect to have a current isolate |
1614 MonitorLocker ml(&monitor); | 1614 // so we exit the isolate here and enter it again after the runloop is done. |
| 1615 ::Dart_ExitIsolate(); |
1615 { | 1616 { |
1616 // The message handler run loop does not expect to have a current isolate | 1617 Monitor monitor; |
1617 // so we exit the isolate here and enter it again after the runloop is done. | 1618 MonitorLocker ml(&monitor); |
1618 Dart_ExitIsolate(); | |
1619 RunLoopData data; | 1619 RunLoopData data; |
1620 data.monitor = &monitor; | 1620 data.monitor = &monitor; |
1621 data.done = false; | 1621 data.done = false; |
1622 I->message_handler()->Run( | 1622 I->message_handler()->Run( |
1623 Dart::thread_pool(), | 1623 Dart::thread_pool(), |
1624 NULL, RunLoopDone, reinterpret_cast<uword>(&data)); | 1624 NULL, RunLoopDone, reinterpret_cast<uword>(&data)); |
1625 while (!data.done) { | 1625 while (!data.done) { |
1626 ml.Wait(); | 1626 ml.Wait(); |
1627 } | 1627 } |
1628 ::Dart_EnterIsolate(Api::CastIsolate(I)); | |
1629 } | 1628 } |
| 1629 ::Dart_EnterIsolate(Api::CastIsolate(I)); |
1630 if (T->sticky_error() != Object::null()) { | 1630 if (T->sticky_error() != Object::null()) { |
1631 Dart_Handle error = Api::NewHandle(T, T->sticky_error()); | 1631 Dart_Handle error = Api::NewHandle(T, T->sticky_error()); |
1632 T->clear_sticky_error(); | 1632 T->clear_sticky_error(); |
1633 return error; | 1633 return error; |
1634 } | 1634 } |
1635 if (FLAG_print_class_table) { | 1635 if (FLAG_print_class_table) { |
1636 HANDLESCOPE(T); | 1636 HANDLESCOPE(T); |
1637 I->class_table()->Print(); | 1637 I->class_table()->Print(); |
1638 } | 1638 } |
1639 return Api::Success(); | 1639 return Api::Success(); |
(...skipping 4554 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6194 return Api::Success(); | 6194 return Api::Success(); |
6195 } | 6195 } |
6196 #endif // DART_PRECOMPILER | 6196 #endif // DART_PRECOMPILER |
6197 | 6197 |
6198 | 6198 |
6199 DART_EXPORT bool Dart_IsRunningPrecompiledCode() { | 6199 DART_EXPORT bool Dart_IsRunningPrecompiledCode() { |
6200 return Dart::IsRunningPrecompiledCode(); | 6200 return Dart::IsRunningPrecompiledCode(); |
6201 } | 6201 } |
6202 | 6202 |
6203 } // namespace dart | 6203 } // namespace dart |
OLD | NEW |