| Index: runtime/vm/isolate.cc
|
| diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
|
| index 5ca46ce3d17b0543d19529ce305e8f1135e6296e..764d21ab0a8aaec043b960b20c18f2fa21dce39b 100644
|
| --- a/runtime/vm/isolate.cc
|
| +++ b/runtime/vm/isolate.cc
|
| @@ -5,13 +5,11 @@
|
| #include "vm/isolate.h"
|
|
|
| #include "include/dart_api.h"
|
| -#include "include/dart_native_api.h"
|
| #include "platform/assert.h"
|
| #include "platform/json.h"
|
| #include "vm/code_observers.h"
|
| #include "vm/compiler_stats.h"
|
| #include "vm/coverage.h"
|
| -#include "vm/dart_api_message.h"
|
| #include "vm/dart_api_state.h"
|
| #include "vm/dart_entry.h"
|
| #include "vm/debugger.h"
|
| @@ -167,6 +165,7 @@ class IsolateMessageHandler : public MessageHandler {
|
| bool IsCurrentIsolate() const;
|
| virtual Isolate* isolate() const { return isolate_; }
|
|
|
| + private:
|
| // Keep both these enums in sync with isolate_patch.dart.
|
| // The different Isolate API message types.
|
| enum {
|
| @@ -187,7 +186,6 @@ class IsolateMessageHandler : public MessageHandler {
|
| kAsEventAction = 2
|
| };
|
|
|
| - private:
|
| // A result of false indicates that the isolate should terminate the
|
| // processing of further events.
|
| bool HandleLibMessage(const Array& message);
|
| @@ -752,7 +750,6 @@ void Isolate::InitOnce() {
|
| create_callback_ = NULL;
|
| isolates_list_monitor_ = new Monitor();
|
| ASSERT(isolates_list_monitor_ != NULL);
|
| - EnableIsolateCreation();
|
| }
|
|
|
|
|
| @@ -831,13 +828,8 @@ Isolate* Isolate::Init(const char* name_prefix,
|
| result->compiler_stats_ = new CompilerStats(result);
|
| }
|
| ObjectIdRing::Init(result);
|
| -
|
| - // Add to isolate list. Shutdown and delete the isolate on failure.
|
| - if (!AddIsolateToList(result)) {
|
| - result->Shutdown();
|
| - delete result;
|
| - return NULL;
|
| - }
|
| + // Add to isolate list.
|
| + AddIsolateTolist(result);
|
|
|
| return result;
|
| }
|
| @@ -1480,10 +1472,7 @@ void Isolate::Shutdown() {
|
| HandleScope handle_scope(this);
|
|
|
| // Write out the coverage data if collection has been enabled.
|
| - if ((this != Dart::vm_isolate()) &&
|
| - !ServiceIsolate::IsServiceIsolateDescendant(this)) {
|
| - CodeCoverage::Write(this);
|
| - }
|
| + CodeCoverage::Write(this);
|
|
|
| if ((timeline_event_recorder_ != NULL) &&
|
| (FLAG_timeline_trace_dir != NULL)) {
|
| @@ -1580,7 +1569,7 @@ Dart_EntropySource Isolate::entropy_source_callback_ = NULL;
|
|
|
| Monitor* Isolate::isolates_list_monitor_ = NULL;
|
| Isolate* Isolate::isolates_list_head_ = NULL;
|
| -bool Isolate::creation_enabled_ = false;
|
| +
|
|
|
| void Isolate::IterateObjectPointers(ObjectPointerVisitor* visitor,
|
| bool visit_prologue_weak_handles,
|
| @@ -1929,16 +1918,12 @@ intptr_t Isolate::IsolateListLength() {
|
| }
|
|
|
|
|
| -bool Isolate::AddIsolateToList(Isolate* isolate) {
|
| +void Isolate::AddIsolateTolist(Isolate* isolate) {
|
| MonitorLocker ml(isolates_list_monitor_);
|
| - if (!creation_enabled_) {
|
| - return false;
|
| - }
|
| ASSERT(isolate != NULL);
|
| ASSERT(isolate->next_ == NULL);
|
| isolate->next_ = isolates_list_head_;
|
| isolates_list_head_ = isolate;
|
| - return true;
|
| }
|
|
|
|
|
| @@ -1960,8 +1945,7 @@ void Isolate::RemoveIsolateFromList(Isolate* isolate) {
|
| previous = current;
|
| current = current->next_;
|
| }
|
| - // If we are shutting down the VM, the isolate may not be in the list.
|
| - ASSERT(!creation_enabled_);
|
| + UNREACHABLE();
|
| }
|
|
|
|
|
| @@ -1975,33 +1959,9 @@ void Isolate::CheckForDuplicateThreadState(InterruptableThreadState* state) {
|
| current = current->next_;
|
| }
|
| }
|
| -
|
| -
|
| -int Isolate::IsolateCount() {
|
| - MonitorLocker ml(isolates_list_monitor_);
|
| - Isolate* current = isolates_list_head_;
|
| - int count = 0;
|
| - while (current) {
|
| - count++;
|
| - current = current->next_;
|
| - }
|
| - return count;
|
| -}
|
| #endif
|
|
|
|
|
| -void Isolate::DisableIsolateCreation() {
|
| - MonitorLocker ml(isolates_list_monitor_);
|
| - creation_enabled_ = false;
|
| -}
|
| -
|
| -
|
| -void Isolate::EnableIsolateCreation() {
|
| - MonitorLocker ml(isolates_list_monitor_);
|
| - creation_enabled_ = true;
|
| -}
|
| -
|
| -
|
| template<class T>
|
| T* Isolate::AllocateReusableHandle() {
|
| T* handle = reinterpret_cast<T*>(reusable_handles_.AllocateScopedHandle());
|
| @@ -2010,73 +1970,6 @@ T* Isolate::AllocateReusableHandle() {
|
| }
|
|
|
|
|
| -void Isolate::KillIsolate(Isolate* isolate) {
|
| - Dart_CObject kill_msg;
|
| - Dart_CObject* list_values[4];
|
| - kill_msg.type = Dart_CObject_kArray;
|
| - kill_msg.value.as_array.length = 4;
|
| - kill_msg.value.as_array.values = list_values;
|
| -
|
| - Dart_CObject oob;
|
| - oob.type = Dart_CObject_kInt32;
|
| - oob.value.as_int32 = Message::kIsolateLibOOBMsg;
|
| - list_values[0] = &oob;
|
| -
|
| - Dart_CObject kill;
|
| - kill.type = Dart_CObject_kInt32;
|
| - kill.value.as_int32 = IsolateMessageHandler::kKillMsg;
|
| - list_values[1] = &kill;
|
| -
|
| - Dart_CObject cap;
|
| - cap.type = Dart_CObject_kCapability;
|
| - cap.value.as_capability.id = isolate->terminate_capability();
|
| - list_values[2] = ∩
|
| -
|
| - Dart_CObject imm;
|
| - imm.type = Dart_CObject_kInt32;
|
| - imm.value.as_int32 = IsolateMessageHandler::kImmediateAction;
|
| - list_values[3] = &imm;
|
| -
|
| - isolate->ScheduleInterrupts(Isolate::kMessageInterrupt);
|
| - {
|
| - uint8_t* buffer = NULL;
|
| - ApiMessageWriter writer(&buffer, allocator);
|
| - bool success = writer.WriteCMessage(&kill_msg);
|
| - ASSERT(success);
|
| -
|
| - // Post the message at the given port.
|
| - success = PortMap::PostMessage(new Message(isolate->main_port(),
|
| - buffer,
|
| - writer.BytesWritten(),
|
| - Message::kOOBPriority));
|
| - ASSERT(success);
|
| - }
|
| -}
|
| -
|
| -
|
| -class IsolateKillerVisitor : public IsolateVisitor {
|
| - public:
|
| - IsolateKillerVisitor() {}
|
| -
|
| - virtual ~IsolateKillerVisitor() {}
|
| -
|
| - void VisitIsolate(Isolate* isolate) {
|
| - ASSERT(isolate != NULL);
|
| - if (ServiceIsolate::IsServiceIsolateDescendant(isolate) ||
|
| - (isolate == Dart::vm_isolate())) {
|
| - return;
|
| - }
|
| - Isolate::KillIsolate(isolate);
|
| - }
|
| -};
|
| -
|
| -
|
| -void Isolate::KillAllIsolates() {
|
| - IsolateKillerVisitor visitor;
|
| - VisitIsolates(&visitor);
|
| -}
|
| -
|
| -
|
| static RawInstance* DeserializeObject(Isolate* isolate,
|
| Zone* zone,
|
| uint8_t* obj_data,
|
|
|