| 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 "vm/isolate.h" | 5 #include "vm/isolate.h" |
| 6 | 6 |
| 7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
| 8 #include "include/dart_native_api.h" | 8 #include "include/dart_native_api.h" |
| 9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
| 10 #include "platform/text_buffer.h" | 10 #include "platform/text_buffer.h" |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 return new Message(dest_port, obj.raw(), Message::kNormalPriority); | 121 return new Message(dest_port, obj.raw(), Message::kNormalPriority); |
| 122 } else { | 122 } else { |
| 123 uint8_t* obj_data; | 123 uint8_t* obj_data; |
| 124 intptr_t obj_len; | 124 intptr_t obj_len; |
| 125 SerializeObject(obj, &obj_data, &obj_len, false); | 125 SerializeObject(obj, &obj_data, &obj_len, false); |
| 126 return new Message(dest_port, obj_data, obj_len, Message::kNormalPriority); | 126 return new Message(dest_port, obj_data, obj_len, Message::kNormalPriority); |
| 127 } | 127 } |
| 128 } | 128 } |
| 129 | 129 |
| 130 | 130 |
| 131 bool IsolateVisitor::IsVMInternalIsolate(Isolate* isolate) const { |
| 132 return ((isolate == Dart::vm_isolate()) || |
| 133 ServiceIsolate::IsServiceIsolateDescendant(isolate)); |
| 134 } |
| 135 |
| 136 |
| 131 NoOOBMessageScope::NoOOBMessageScope(Thread* thread) : StackResource(thread) { | 137 NoOOBMessageScope::NoOOBMessageScope(Thread* thread) : StackResource(thread) { |
| 132 thread->DeferOOBMessageInterrupts(); | 138 thread->DeferOOBMessageInterrupts(); |
| 133 } | 139 } |
| 134 | 140 |
| 135 | 141 |
| 136 NoOOBMessageScope::~NoOOBMessageScope() { | 142 NoOOBMessageScope::~NoOOBMessageScope() { |
| 137 thread()->RestoreOOBMessageInterrupts(); | 143 thread()->RestoreOOBMessageInterrupts(); |
| 138 } | 144 } |
| 139 | 145 |
| 140 | 146 |
| (...skipping 2425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2566 if (ShouldKill(isolate)) { | 2572 if (ShouldKill(isolate)) { |
| 2567 isolate->KillLocked(msg_id_); | 2573 isolate->KillLocked(msg_id_); |
| 2568 } | 2574 } |
| 2569 } | 2575 } |
| 2570 | 2576 |
| 2571 private: | 2577 private: |
| 2572 bool ShouldKill(Isolate* isolate) { | 2578 bool ShouldKill(Isolate* isolate) { |
| 2573 // If a target_ is specified, then only kill the target_. | 2579 // If a target_ is specified, then only kill the target_. |
| 2574 // Otherwise, don't kill the service isolate or vm isolate. | 2580 // Otherwise, don't kill the service isolate or vm isolate. |
| 2575 return (((target_ != NULL) && (isolate == target_)) || | 2581 return (((target_ != NULL) && (isolate == target_)) || |
| 2576 ((target_ == NULL) && | 2582 ((target_ == NULL) && !IsVMInternalIsolate(isolate))); |
| 2577 !ServiceIsolate::IsServiceIsolateDescendant(isolate) && | |
| 2578 (isolate != Dart::vm_isolate()))); | |
| 2579 } | 2583 } |
| 2580 | 2584 |
| 2581 Isolate* target_; | 2585 Isolate* target_; |
| 2582 Isolate::LibMsgId msg_id_; | 2586 Isolate::LibMsgId msg_id_; |
| 2583 }; | 2587 }; |
| 2584 | 2588 |
| 2585 | 2589 |
| 2586 void Isolate::KillAllIsolates(LibMsgId msg_id) { | 2590 void Isolate::KillAllIsolates(LibMsgId msg_id) { |
| 2587 IsolateKillerVisitor visitor(msg_id); | 2591 IsolateKillerVisitor visitor(msg_id); |
| 2588 VisitIsolates(&visitor); | 2592 VisitIsolates(&visitor); |
| (...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2938 void IsolateSpawnState::DecrementSpawnCount() { | 2942 void IsolateSpawnState::DecrementSpawnCount() { |
| 2939 ASSERT(spawn_count_monitor_ != NULL); | 2943 ASSERT(spawn_count_monitor_ != NULL); |
| 2940 ASSERT(spawn_count_ != NULL); | 2944 ASSERT(spawn_count_ != NULL); |
| 2941 MonitorLocker ml(spawn_count_monitor_); | 2945 MonitorLocker ml(spawn_count_monitor_); |
| 2942 ASSERT(*spawn_count_ > 0); | 2946 ASSERT(*spawn_count_ > 0); |
| 2943 *spawn_count_ = *spawn_count_ - 1; | 2947 *spawn_count_ = *spawn_count_ - 1; |
| 2944 ml.Notify(); | 2948 ml.Notify(); |
| 2945 } | 2949 } |
| 2946 | 2950 |
| 2947 } // namespace dart | 2951 } // namespace dart |
| OLD | NEW |