Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(142)

Unified Diff: runtime/vm/service_isolate.cc

Issue 1053713003: Do not register service isolate descendants with service (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« runtime/vm/service_isolate.h ('K') | « runtime/vm/service_isolate.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/service_isolate.cc
diff --git a/runtime/vm/service_isolate.cc b/runtime/vm/service_isolate.cc
index c9a47c2418d3fd8efe0268813c6e2e544d332988..dc78c84a245a91287b887bd4d71288bad5c377fe 100644
--- a/runtime/vm/service_isolate.cc
+++ b/runtime/vm/service_isolate.cc
@@ -149,6 +149,7 @@ const char* ServiceIsolate::kName = "vm-service";
Isolate* ServiceIsolate::isolate_ = NULL;
Dart_Port ServiceIsolate::port_ = ILLEGAL_PORT;
Dart_Port ServiceIsolate::load_port_ = ILLEGAL_PORT;
+Dart_Port ServiceIsolate::origin_ = ILLEGAL_PORT;
Dart_IsolateCreateCallback ServiceIsolate::create_callback_ = NULL;
uint8_t* ServiceIsolate::exit_message_ = NULL;
intptr_t ServiceIsolate::exit_message_length_ = 0;
@@ -181,8 +182,9 @@ class RegisterRunningIsolatesVisitor : public IsolateVisitor {
virtual void VisitIsolate(Isolate* isolate) {
ASSERT(ServiceIsolate::IsServiceIsolate(Isolate::Current()));
if (ServiceIsolate::IsServiceIsolate(isolate) ||
- (isolate == Dart::vm_isolate())) {
- // We do not register the service or vm isolate.
+ (isolate == Dart::vm_isolate()) ||
+ (isolate->origin_id() == ServiceIsolate::Origin())) {
turnidge 2015/04/01 19:57:34 Can this whole test get replaces by ServiceIsolate
Cutch 2015/04/01 20:19:04 Done.
+ // We do not register the service (and descendants) or the vm-isolate.
return;
}
// Setup arguments for call.
@@ -281,6 +283,7 @@ class ServiceIsolateNatives : public AllStatic {
Dart_Port port = ExtractPort(isolate, result);
ASSERT(port != ILLEGAL_PORT);
ServiceIsolate::SetServicePort(port);
+ ServiceIsolate::SetOrigin(isolate->origin_id());
Dart_ExitScope();
}
@@ -377,11 +380,22 @@ bool ServiceIsolate::IsServiceIsolate(Isolate* isolate) {
}
+bool ServiceIsolate::IsServiceIsolateDescendant(Isolate* isolate) {
+ MonitorLocker ml(monitor_);
+ return isolate->origin_id() == origin_;
+}
+
+
Dart_Port ServiceIsolate::Port() {
MonitorLocker ml(monitor_);
return port_;
}
+Dart_Port ServiceIsolate::Origin() {
+ MonitorLocker ml(monitor_);
+ return origin_;
+}
+
Dart_Port ServiceIsolate::WaitForLoadPort() {
MonitorLocker ml(monitor_);
@@ -405,7 +419,7 @@ bool ServiceIsolate::SendIsolateStartupMessage() {
return false;
}
Isolate* isolate = Isolate::Current();
- if (IsServiceIsolate(isolate)) {
+ if (IsServiceIsolate(isolate) || IsServiceIsolateDescendant(isolate)) {
turnidge 2015/04/01 19:57:34 Collapse and ditto below.
Cutch 2015/04/01 20:19:04 Done.
return false;
}
ASSERT(isolate != NULL);
@@ -436,7 +450,7 @@ bool ServiceIsolate::SendIsolateShutdownMessage() {
return false;
}
Isolate* isolate = Isolate::Current();
- if (IsServiceIsolate(isolate)) {
+ if (IsServiceIsolate(isolate) || IsServiceIsolateDescendant(isolate)) {
return false;
}
ASSERT(isolate != NULL);
@@ -479,6 +493,12 @@ void ServiceIsolate::SendServiceExitMessage() {
}
+void ServiceIsolate::SetOrigin(Dart_Port origin) {
+ MonitorLocker ml(monitor_);
+ origin_ = origin;
+}
+
+
void ServiceIsolate::SetServicePort(Dart_Port port) {
MonitorLocker ml(monitor_);
port_ = port;
@@ -649,6 +669,7 @@ class RunServiceTask : public ThreadPool::Task {
}
ServiceIsolate::SetServiceIsolate(NULL);
ServiceIsolate::SetServicePort(ILLEGAL_PORT);
+ ServiceIsolate::SetOrigin(ILLEGAL_PORT);
if (FLAG_trace_service) {
OS::Print("vm-service: Shutdown.\n");
}
« runtime/vm/service_isolate.h ('K') | « runtime/vm/service_isolate.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698