[vm/concurrency] Remove duplicate shutdown logic for service/kernel isolates
This is a follow up to [0] which already did this for main isolate vs
helper isolates.
[0] https://dart-review.googlesource.com/c/sdk/+/170984
TEST=Changes existing implementation which is already exercised/tested.
Change-Id: I5f1260da642fb191e5db3316a104dd0336aab414
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/171589
Reviewed-by: Alexander Aprelev <aam@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
diff --git a/runtime/vm/kernel_isolate.cc b/runtime/vm/kernel_isolate.cc
index 9af2bd6..5190afd 100644
--- a/runtime/vm/kernel_isolate.cc
+++ b/runtime/vm/kernel_isolate.cc
@@ -140,17 +140,19 @@
if (FLAG_trace_kernel) {
OS::PrintErr(DART_KERNEL_ISOLATE_NAME ": ShutdownIsolate\n");
}
- Isolate* I = reinterpret_cast<Isolate*>(parameter);
+ KernelIsolate::SetLoadPort(ILLEGAL_PORT);
+ Dart_EnterIsolate(reinterpret_cast<Dart_Isolate>(parameter));
{
- // Print the error if there is one. This may execute dart code to
- // print the exception object, so we need to use a StartIsolateScope.
- ASSERT(Isolate::Current() == NULL);
- StartIsolateScope start_scope(I);
- Thread* T = Thread::Current();
- ASSERT(I == T->isolate());
- I->WaitForOutstandingSpawns();
+ auto T = Thread::Current();
+ TransitionNativeToVM transition(T);
StackZone zone(T);
HandleScope handle_scope(T);
+
+ auto I = T->isolate();
+ ASSERT(KernelIsolate::IsKernelIsolate(I));
+
+ // Print the error if there is one. This may execute dart code to
+ // print the exception object, so we need to use a StartIsolateScope.
Error& error = Error::Handle(Z);
error = T->sticky_error();
if (!error.IsNull() && !error.IsUnwindError()) {
@@ -162,14 +164,8 @@
OS::PrintErr(DART_KERNEL_ISOLATE_NAME ": Error: %s\n",
error.ToErrorCString());
}
- Dart::RunShutdownCallback();
}
-
- ASSERT(KernelIsolate::IsKernelIsolate(I));
- KernelIsolate::SetLoadPort(ILLEGAL_PORT);
-
- // Shut the isolate down.
- Dart::ShutdownIsolate(I);
+ Dart_ShutdownIsolate();
if (FLAG_trace_kernel) {
OS::PrintErr(DART_KERNEL_ISOLATE_NAME ": Shutdown.\n");
}
diff --git a/runtime/vm/service_isolate.cc b/runtime/vm/service_isolate.cc
index f785a65..ab07c2a 100644
--- a/runtime/vm/service_isolate.cc
+++ b/runtime/vm/service_isolate.cc
@@ -398,18 +398,18 @@
if (FLAG_trace_service) {
OS::PrintErr("vm-service: ShutdownIsolate\n");
}
- Isolate* I = reinterpret_cast<Isolate*>(parameter);
- ASSERT(ServiceIsolate::IsServiceIsolate(I));
+ Dart_EnterIsolate(reinterpret_cast<Dart_Isolate>(parameter));
{
- // Print the error if there is one. This may execute dart code to
- // print the exception object, so we need to use a StartIsolateScope.
- ASSERT(Isolate::Current() == NULL);
- StartIsolateScope start_scope(I);
- Thread* T = Thread::Current();
- ASSERT(I == T->isolate());
- I->WaitForOutstandingSpawns();
+ auto T = Thread::Current();
+ TransitionNativeToVM transition(T);
StackZone zone(T);
HandleScope handle_scope(T);
+
+ auto I = T->isolate();
+ ASSERT(ServiceIsolate::IsServiceIsolate(I));
+
+ // Print the error if there is one. This may execute dart code to
+ // print the exception object, so we need to use a StartIsolateScope.
Error& error = Error::Handle(Z);
error = T->sticky_error();
if (!error.IsNull() && !error.IsUnwindError()) {
@@ -421,11 +421,8 @@
OS::PrintErr(DART_VM_SERVICE_ISOLATE_NAME ": Error: %s\n",
error.ToErrorCString());
}
- Dart::RunShutdownCallback();
}
-
- // Shut the isolate down.
- Dart::ShutdownIsolate(I);
+ Dart_ShutdownIsolate();
if (FLAG_trace_service) {
OS::PrintErr(DART_VM_SERVICE_ISOLATE_NAME ": Shutdown.\n");
}