| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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/service_isolate.h" | 5 #include "vm/service_isolate.h" |
| 6 | 6 |
| 7 #include "vm/compiler.h" | 7 #include "vm/compiler.h" |
| 8 #include "vm/dart_api_impl.h" | 8 #include "vm/dart_api_impl.h" |
| 9 #include "vm/dart_entry.h" | 9 #include "vm/dart_entry.h" |
| 10 #include "vm/isolate.h" | 10 #include "vm/isolate.h" |
| (...skipping 731 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 742 ASSERT(monitor_ == NULL); | 742 ASSERT(monitor_ == NULL); |
| 743 monitor_ = new Monitor(); | 743 monitor_ = new Monitor(); |
| 744 ASSERT(monitor_ != NULL); | 744 ASSERT(monitor_ != NULL); |
| 745 // Grab the isolate create callback here to avoid race conditions with tests | 745 // Grab the isolate create callback here to avoid race conditions with tests |
| 746 // that change this after Dart_Initialize returns. | 746 // that change this after Dart_Initialize returns. |
| 747 create_callback_ = Isolate::CreateCallback(); | 747 create_callback_ = Isolate::CreateCallback(); |
| 748 Dart::thread_pool()->Run(new RunServiceTask()); | 748 Dart::thread_pool()->Run(new RunServiceTask()); |
| 749 } | 749 } |
| 750 | 750 |
| 751 | 751 |
| 752 void ServiceIsolate::KillServiceIsolate() { | |
| 753 { | |
| 754 MonitorLocker ml(monitor_); | |
| 755 shutting_down_ = true; | |
| 756 } | |
| 757 Isolate::KillIsolate(isolate_); | |
| 758 { | |
| 759 MonitorLocker ml(monitor_); | |
| 760 while (shutting_down_) { | |
| 761 ml.Wait(); | |
| 762 } | |
| 763 } | |
| 764 } | |
| 765 | |
| 766 | |
| 767 void ServiceIsolate::Shutdown() { | 752 void ServiceIsolate::Shutdown() { |
| 768 if (!IsRunning()) { | 753 if (!IsRunning()) { |
| 769 if (isolate_ != NULL) { | |
| 770 // TODO(johnmccutchan,turnidge) When it is possible to properly create | |
| 771 // the VMService object and set up its shutdown handler in the service | |
| 772 // isolate's main() function, this case will no longer be possible and | |
| 773 // can be removed. | |
| 774 KillServiceIsolate(); | |
| 775 } | |
| 776 return; | 754 return; |
| 777 } | 755 } |
| 778 { | 756 { |
| 779 MonitorLocker ml(monitor_); | 757 MonitorLocker ml(monitor_); |
| 780 shutting_down_ = true; | 758 shutting_down_ = true; |
| 781 } | 759 } |
| 782 SendServiceExitMessage(); | 760 SendServiceExitMessage(); |
| 783 { | 761 { |
| 784 MonitorLocker ml(monitor_); | 762 MonitorLocker ml(monitor_); |
| 785 while (shutting_down_ && (port_ != ILLEGAL_PORT)) { | 763 while (shutting_down_ && (port_ != ILLEGAL_PORT)) { |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 829 return result; | 807 return result; |
| 830 } | 808 } |
| 831 Dart_Handle source = GetSource(url_string); | 809 Dart_Handle source = GetSource(url_string); |
| 832 if (Dart_IsError(source)) { | 810 if (Dart_IsError(source)) { |
| 833 return source; | 811 return source; |
| 834 } | 812 } |
| 835 return Dart_LoadSource(library, url, source, 0, 0); | 813 return Dart_LoadSource(library, url, source, 0, 0); |
| 836 } | 814 } |
| 837 | 815 |
| 838 } // namespace dart | 816 } // namespace dart |
| OLD | NEW |