Index: runtime/vm/service_isolate.cc |
diff --git a/runtime/vm/service_isolate.cc b/runtime/vm/service_isolate.cc |
index 177129d36d8941883e62b868a0f7f2d74f87739c..3e0358638dd86d267d51f39ce54ca9142c68f597 100644 |
--- a/runtime/vm/service_isolate.cc |
+++ b/runtime/vm/service_isolate.cc |
@@ -219,15 +219,16 @@ class ServiceIsolateNatives : public AllStatic { |
public: |
static void SendIsolateServiceMessage(Dart_NativeArguments args) { |
NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args); |
- Isolate* isolate = arguments->thread()->isolate(); |
- StackZone stack_zone(isolate); |
+ Thread* thread = arguments->thread(); |
+ StackZone stack_zone(thread); |
Zone* zone = stack_zone.GetZone(); // Used by GET_NON_NULL_NATIVE_ARGUMENT. |
- HANDLESCOPE(isolate); |
+ HANDLESCOPE(thread); |
GET_NON_NULL_NATIVE_ARGUMENT(SendPort, sp, arguments->NativeArgAt(0)); |
GET_NON_NULL_NATIVE_ARGUMENT(Array, message, arguments->NativeArgAt(1)); |
// Set the type of the OOB message. |
- message.SetAt(0, Smi::Handle(isolate, Smi::New(Message::kServiceOOBMsg))); |
+ message.SetAt(0, Smi::Handle(thread->zone(), |
+ Smi::New(Message::kServiceOOBMsg))); |
// Serialize message. |
uint8_t* data = NULL; |
@@ -243,19 +244,20 @@ class ServiceIsolateNatives : public AllStatic { |
static void SendRootServiceMessage(Dart_NativeArguments args) { |
NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args); |
- Isolate* isolate = arguments->thread()->isolate(); |
- StackZone stack_zone(isolate); |
+ Thread* thread = arguments->thread(); |
+ StackZone stack_zone(thread); |
Zone* zone = stack_zone.GetZone(); // Used by GET_NON_NULL_NATIVE_ARGUMENT. |
- HANDLESCOPE(isolate); |
+ HANDLESCOPE(thread); |
GET_NON_NULL_NATIVE_ARGUMENT(Array, message, arguments->NativeArgAt(0)); |
Service::HandleRootMessage(message); |
} |
static void OnStart(Dart_NativeArguments args) { |
NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args); |
- Isolate* isolate = arguments->thread()->isolate(); |
- StackZone zone(isolate); |
- HANDLESCOPE(isolate); |
+ Thread* thread = arguments->thread(); |
+ Isolate* isolate = thread->isolate(); |
+ StackZone zone(thread); |
+ HANDLESCOPE(thread); |
{ |
if (FLAG_trace_service) { |
OS::Print("vm-service: Booting dart:vmservice library.\n"); |
@@ -287,9 +289,9 @@ class ServiceIsolateNatives : public AllStatic { |
static void OnExit(Dart_NativeArguments args) { |
NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args); |
- Isolate* isolate = arguments->thread()->isolate(); |
- StackZone zone(isolate); |
- HANDLESCOPE(isolate); |
+ Thread* thread = arguments->thread(); |
+ StackZone zone(thread); |
+ HANDLESCOPE(thread); |
{ |
if (FLAG_trace_service) { |
OS::Print("vm-service: processed exit message.\n"); |
@@ -299,10 +301,10 @@ class ServiceIsolateNatives : public AllStatic { |
static void ListenStream(Dart_NativeArguments args) { |
NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args); |
- Isolate* isolate = arguments->thread()->isolate(); |
- StackZone stack_zone(isolate); |
+ Thread* thread = arguments->thread(); |
+ StackZone stack_zone(thread); |
Zone* zone = stack_zone.GetZone(); // Used by GET_NON_NULL_NATIVE_ARGUMENT. |
- HANDLESCOPE(isolate); |
+ HANDLESCOPE(thread); |
GET_NON_NULL_NATIVE_ARGUMENT(String, stream_id, arguments->NativeArgAt(0)); |
bool result = Service::ListenStream(stream_id.ToCString()); |
arguments->SetReturn(Bool::Get(result)); |
@@ -310,10 +312,10 @@ class ServiceIsolateNatives : public AllStatic { |
static void CancelStream(Dart_NativeArguments args) { |
NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args); |
- Isolate* isolate = arguments->thread()->isolate(); |
- StackZone stack_zone(isolate); |
+ Thread* thread = arguments->thread(); |
+ StackZone stack_zone(thread); |
Zone* zone = stack_zone.GetZone(); // Used by GET_NON_NULL_NATIVE_ARGUMENT. |
- HANDLESCOPE(isolate); |
+ HANDLESCOPE(thread); |
GET_NON_NULL_NATIVE_ARGUMENT(String, stream_id, arguments->NativeArgAt(0)); |
Service::CancelStream(stream_id.ToCString()); |
} |
@@ -424,12 +426,13 @@ bool ServiceIsolate::SendIsolateStartupMessage() { |
if (!IsRunning()) { |
return false; |
} |
- Isolate* isolate = Isolate::Current(); |
+ Thread* thread = Thread::Current(); |
+ Isolate* isolate = thread->isolate(); |
if (IsServiceIsolateDescendant(isolate)) { |
return false; |
} |
ASSERT(isolate != NULL); |
- HANDLESCOPE(isolate); |
+ HANDLESCOPE(thread); |
const String& name = String::Handle(String::New(isolate->name())); |
ASSERT(!name.IsNull()); |
const Array& list = Array::Handle( |
@@ -455,12 +458,13 @@ bool ServiceIsolate::SendIsolateShutdownMessage() { |
if (!IsRunning()) { |
return false; |
} |
- Isolate* isolate = Isolate::Current(); |
+ Thread* thread = Thread::Current(); |
+ Isolate* isolate = thread->isolate(); |
if (IsServiceIsolateDescendant(isolate)) { |
return false; |
} |
ASSERT(isolate != NULL); |
- HANDLESCOPE(isolate); |
+ HANDLESCOPE(thread); |
const String& name = String::Handle(String::New(isolate->name())); |
ASSERT(!name.IsNull()); |
const Array& list = Array::Handle( |
@@ -523,6 +527,8 @@ void ServiceIsolate::SetLoadPort(Dart_Port port) { |
void ServiceIsolate::MaybeInjectVMServiceLibrary(Isolate* isolate) { |
+ Thread* thread = Thread::Current(); |
+ ASSERT(isolate == thread->isolate()); |
ASSERT(isolate != NULL); |
ASSERT(isolate->name() != NULL); |
if (!ServiceIsolate::NameEquals(isolate->name())) { |
@@ -536,7 +542,7 @@ void ServiceIsolate::MaybeInjectVMServiceLibrary(Isolate* isolate) { |
SetServiceIsolate(isolate); |
StackZone zone(isolate); |
- HANDLESCOPE(isolate); |
+ HANDLESCOPE(thread); |
// Register dart:vmservice library. |
const String& url_str = String::Handle(Symbols::DartVMService().raw()); |
@@ -582,8 +588,11 @@ void ServiceIsolate::ConstructExitMessageAndCache(Isolate* isolate) { |
// Construct and cache exit message here so we can send it without needing an |
// isolate. |
StartIsolateScope iso_scope(isolate); |
+ Thread* thread = Thread::Current(); |
+ ASSERT(isolate == thread->isolate()); |
+ ASSERT(isolate != NULL); |
StackZone zone(isolate); |
- HANDLESCOPE(isolate); |
+ HANDLESCOPE(thread); |
ASSERT(exit_message_ == NULL); |
ASSERT(exit_message_length_ == 0); |
const Array& list = Array::Handle(MakeServiceExitMessage()); |
@@ -668,8 +677,10 @@ class RunServiceTask : public ThreadPool::Task { |
// Print the error if there is one. This may execute dart code to |
// print the exception object, so we need to use a StartIsolateScope. |
StartIsolateScope start_scope(isolate); |
+ Thread* thread = Thread::Current(); |
+ ASSERT(isolate == thread->isolate()); |
StackZone zone(isolate); |
- HandleScope handle_scope(isolate); |
+ HandleScope handle_scope(thread); |
Error& error = Error::Handle(); |
error = isolate->object_store()->sticky_error(); |
if (!error.IsNull()) { |
@@ -692,8 +703,10 @@ class RunServiceTask : public ThreadPool::Task { |
void RunMain(Isolate* isolate) { |
StartIsolateScope iso_scope(isolate); |
+ Thread* thread = Thread::Current(); |
+ ASSERT(isolate == thread->isolate()); |
StackZone zone(isolate); |
- HANDLESCOPE(isolate); |
+ HANDLESCOPE(thread); |
// Invoke main which will return the loadScriptPort. |
const Library& root_library = |
Library::Handle(isolate, isolate->object_store()->root_library()); |