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, |