Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit cef6751

Browse files
authored
Revert "Test child isolates are terminated when root is shutdown (#13048)" (#13067)
This reverts commit e96c740.
1 parent e96c740 commit cef6751

File tree

2 files changed

+24
-89
lines changed

2 files changed

+24
-89
lines changed

runtime/dart_isolate_unittests.cc

Lines changed: 24 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -99,27 +99,22 @@ class AutoIsolateShutdown {
9999
AutoIsolateShutdown() = default;
100100

101101
AutoIsolateShutdown(std::shared_ptr<DartIsolate> isolate,
102-
fml::RefPtr<fml::TaskRunner> runner,
103-
bool confirm_shutdown)
104-
: isolate_(std::move(isolate)),
105-
runner_(std::move(runner)),
106-
confirm_shutdown_(confirm_shutdown) {}
102+
fml::RefPtr<fml::TaskRunner> runner)
103+
: isolate_(std::move(isolate)), runner_(std::move(runner)) {}
107104

108105
~AutoIsolateShutdown() {
109106
if (!IsValid()) {
110107
return;
111108
}
112109
fml::AutoResetWaitableEvent latch;
113-
fml::TaskRunner::RunNowOrPostTask(
114-
runner_,
115-
[isolate = isolate_, &latch, confirm_shutdown = confirm_shutdown_]() {
116-
FML_LOG(INFO) << "Shutting down isolate.";
117-
if (!isolate->Shutdown() && confirm_shutdown) {
118-
FML_LOG(ERROR) << "Could not shutdown isolate.";
119-
FML_CHECK(false);
120-
}
121-
latch.Signal();
122-
});
110+
fml::TaskRunner::RunNowOrPostTask(runner_, [isolate = isolate_, &latch]() {
111+
FML_LOG(INFO) << "Shutting down isolate.";
112+
if (!isolate->Shutdown()) {
113+
FML_LOG(ERROR) << "Could not shutdown isolate.";
114+
FML_CHECK(false);
115+
}
116+
latch.Signal();
117+
});
123118
latch.Wait();
124119
}
125120

@@ -154,7 +149,6 @@ class AutoIsolateShutdown {
154149
private:
155150
std::shared_ptr<DartIsolate> isolate_;
156151
fml::RefPtr<fml::TaskRunner> runner_;
157-
bool confirm_shutdown_;
158152

159153
FML_DISALLOW_COPY_AND_ASSIGN(AutoIsolateShutdown);
160154
};
@@ -164,8 +158,7 @@ static void RunDartCodeInIsolate(DartVMRef& vm_ref,
164158
const Settings& settings,
165159
fml::RefPtr<fml::TaskRunner> task_runner,
166160
std::string entrypoint,
167-
const std::vector<std::string>& args,
168-
bool confirm_shutdown) {
161+
const std::vector<std::string>& args) {
169162
FML_CHECK(task_runner->RunsTasksOnCurrentThread());
170163

171164
if (!vm_ref) {
@@ -200,8 +193,8 @@ static void RunDartCodeInIsolate(DartVMRef& vm_ref,
200193
settings.isolate_shutdown_callback // isolate shutdown callback
201194
);
202195

203-
auto root_isolate = std::make_unique<AutoIsolateShutdown>(
204-
weak_isolate.lock(), task_runner, confirm_shutdown);
196+
auto root_isolate =
197+
std::make_unique<AutoIsolateShutdown>(weak_isolate.lock(), task_runner);
205198

206199
if (!root_isolate->IsValid()) {
207200
FML_LOG(ERROR) << "Could not create isolate.";
@@ -274,14 +267,13 @@ static std::unique_ptr<AutoIsolateShutdown> RunDartCodeInIsolate(
274267
const Settings& settings,
275268
fml::RefPtr<fml::TaskRunner> task_runner,
276269
std::string entrypoint,
277-
const std::vector<std::string>& args,
278-
bool confirm_shutdown) {
270+
const std::vector<std::string>& args) {
279271
std::unique_ptr<AutoIsolateShutdown> result;
280272
fml::AutoResetWaitableEvent latch;
281273
fml::TaskRunner::RunNowOrPostTask(
282274
task_runner, fml::MakeCopyable([&]() mutable {
283275
RunDartCodeInIsolate(vm_ref, result, settings, task_runner, entrypoint,
284-
args, confirm_shutdown);
276+
args);
285277
latch.Signal();
286278
}));
287279
latch.Wait();
@@ -293,7 +285,7 @@ TEST_F(DartIsolateTest, IsolateCanLoadAndRunDartCode) {
293285
const auto settings = CreateSettingsForFixture();
294286
auto vm_ref = DartVMRef::Create(settings);
295287
auto isolate = RunDartCodeInIsolate(vm_ref, settings, GetCurrentTaskRunner(),
296-
"main", {}, true);
288+
"main", {});
297289
ASSERT_TRUE(isolate);
298290
ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running);
299291
}
@@ -303,7 +295,7 @@ TEST_F(DartIsolateTest, IsolateCannotLoadAndRunUnknownDartEntrypoint) {
303295
const auto settings = CreateSettingsForFixture();
304296
auto vm_ref = DartVMRef::Create(settings);
305297
auto isolate = RunDartCodeInIsolate(vm_ref, settings, GetCurrentTaskRunner(),
306-
"thisShouldNotExist", {}, true);
298+
"thisShouldNotExist", {});
307299
ASSERT_FALSE(isolate);
308300
}
309301

@@ -312,7 +304,7 @@ TEST_F(DartIsolateTest, CanRunDartCodeCodeSynchronously) {
312304
const auto settings = CreateSettingsForFixture();
313305
auto vm_ref = DartVMRef::Create(settings);
314306
auto isolate = RunDartCodeInIsolate(vm_ref, settings, GetCurrentTaskRunner(),
315-
"main", {}, true);
307+
"main", {});
316308

317309
ASSERT_TRUE(isolate);
318310
ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running);
@@ -336,7 +328,7 @@ TEST_F(DartIsolateTest, CanRegisterNativeCallback) {
336328
const auto settings = CreateSettingsForFixture();
337329
auto vm_ref = DartVMRef::Create(settings);
338330
auto isolate = RunDartCodeInIsolate(vm_ref, settings, CreateNewThread(),
339-
"canRegisterNativeCallback", {}, true);
331+
"canRegisterNativeCallback", {});
340332
ASSERT_TRUE(isolate);
341333
ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running);
342334
latch.Wait();
@@ -359,7 +351,7 @@ TEST_F(DartIsolateTest, CanSaveCompilationTrace) {
359351
const auto settings = CreateSettingsForFixture();
360352
auto vm_ref = DartVMRef::Create(settings);
361353
auto isolate = RunDartCodeInIsolate(vm_ref, settings, CreateNewThread(),
362-
"testCanSaveCompilationTrace", {}, true);
354+
"testCanSaveCompilationTrace", {});
363355
ASSERT_TRUE(isolate);
364356
ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running);
365357

@@ -385,9 +377,8 @@ TEST_F(DartIsolateTest, CanLaunchSecondaryIsolates) {
385377
child_shutdown_latch.Signal();
386378
};
387379
auto vm_ref = DartVMRef::Create(settings);
388-
auto isolate =
389-
RunDartCodeInIsolate(vm_ref, settings, CreateNewThread(),
390-
"testCanLaunchSecondaryIsolate", {}, true);
380+
auto isolate = RunDartCodeInIsolate(vm_ref, settings, CreateNewThread(),
381+
"testCanLaunchSecondaryIsolate", {});
391382
ASSERT_TRUE(isolate);
392383
ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running);
393384
child_shutdown_latch.Wait(); // wait for child isolate to shutdown first
@@ -406,54 +397,13 @@ TEST_F(DartIsolateTest, CanRecieveArguments) {
406397

407398
const auto settings = CreateSettingsForFixture();
408399
auto vm_ref = DartVMRef::Create(settings);
409-
auto isolate =
410-
RunDartCodeInIsolate(vm_ref, settings, CreateNewThread(),
411-
"testCanRecieveArguments", {"arg1"}, true);
400+
auto isolate = RunDartCodeInIsolate(vm_ref, settings, CreateNewThread(),
401+
"testCanRecieveArguments", {"arg1"});
412402
ASSERT_TRUE(isolate);
413403
ASSERT_EQ(isolate->get()->GetPhase(), DartIsolate::Phase::Running);
414404

415405
latch.Wait();
416406
}
417407

418-
TEST_F(DartIsolateTest, RootIsolateShutdownStopsChildIsolates) {
419-
ASSERT_FALSE(DartVMRef::IsInstanceRunning());
420-
fml::CountDownLatch latch(12);
421-
fml::CountDownLatch shutdown_latch(5);
422-
AddNativeCallback("NotifyNative",
423-
CREATE_NATIVE_ENTRY(([&latch](Dart_NativeArguments args) {
424-
latch.CountDown();
425-
})));
426-
AddNativeCallback(
427-
"PassMessage", CREATE_NATIVE_ENTRY(([&latch](Dart_NativeArguments args) {
428-
auto message = tonic::DartConverter<std::string>::FromDart(
429-
Dart_GetNativeArgument(args, 0));
430-
ASSERT_EQ("In child Isolate.", message);
431-
latch.CountDown();
432-
})));
433-
434-
size_t destruction_callback_count = 0;
435-
auto settings = CreateSettingsForFixture();
436-
settings.isolate_shutdown_callback = [&shutdown_latch,
437-
&destruction_callback_count]() {
438-
destruction_callback_count++;
439-
shutdown_latch.CountDown();
440-
};
441-
auto vm_ref = DartVMRef::Create(settings);
442-
auto vm_data = vm_ref.GetVMData();
443-
444-
std::unique_ptr<AutoIsolateShutdown> isolate;
445-
fml::RefPtr<fml::TaskRunner> task_runner = CreateNewThread();
446-
fml::TaskRunner::RunNowOrPostTask(
447-
task_runner, fml::MakeCopyable([&]() mutable {
448-
RunDartCodeInIsolate(vm_ref, isolate, settings, task_runner,
449-
"testSecondaryIsolateShutdown", {}, false);
450-
}));
451-
latch.Wait(); // wait for last NotifyNative called by main isolate
452-
ASSERT_TRUE(isolate->get()->Shutdown() || true);
453-
shutdown_latch.Wait();
454-
// root isolate will be auto-shutdown
455-
ASSERT_EQ(destruction_callback_count, 5u);
456-
}
457-
458408
} // namespace testing
459409
} // namespace flutter

runtime/fixtures/runtime_test.dart

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -60,18 +60,3 @@ void testCanLaunchSecondaryIsolate() {
6060
void testCanRecieveArguments(List<String> args) {
6161
notifyResult(args != null && args.length == 1 && args[0] == 'arg1');
6262
}
63-
64-
@pragma('vm:entry-point')
65-
void testSecondaryIsolateShutdown() {
66-
final onExit = RawReceivePort((_) { notifyNative(); });
67-
Isolate.spawn(shutdownIsolateMain, 'You are isolate number 1', onExit: onExit.sendPort);
68-
Isolate.spawn(shutdownIsolateMain, 'You are isolate number 2', onExit: onExit.sendPort);
69-
Isolate.spawn(shutdownIsolateMain, 'You are isolate number 3', onExit: onExit.sendPort);
70-
Isolate.spawn(shutdownIsolateMain, 'You are isolate number 4', onExit: onExit.sendPort);
71-
}
72-
73-
void shutdownIsolateMain(String message) {
74-
print('Secondary isolate got message: ' + message);
75-
passMessage('In child Isolate.');
76-
notifyNative();
77-
}

0 commit comments

Comments
 (0)