From 9cfc67ef57fb2cdcbf0fcce1b48aad328f5b5c2d Mon Sep 17 00:00:00 2001 From: Adam Barth Date: Thu, 4 May 2017 21:30:39 -0700 Subject: [PATCH] Retrieve the last error from the proper thread (#3649) Previously, the last error was a global static. Now it is a thread-specific value, which means we need to visit the UI thread to read the value. --- shell/platform/linux/main_linux.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/shell/platform/linux/main_linux.cc b/shell/platform/linux/main_linux.cc index 25750fa6fe6cd..cfd08ab243382 100644 --- a/shell/platform/linux/main_linux.cc +++ b/shell/platform/linux/main_linux.cc @@ -102,8 +102,14 @@ void RunNonInteractive(ftl::CommandLine initial_command_line, test_runner.platform_view().engine().GetLoadScriptError(); if (error == tonic::kNoError) error = task_observer.last_error(); - if (error == tonic::kNoError) - error = tonic::DartMicrotaskQueue::GetForCurrentThread()->GetLastError(); + if (error == tonic::kNoError) { + ftl::AutoResetWaitableEvent latch; + blink::Threads::UI()->PostTask([&error, &latch] { + error = tonic::DartMicrotaskQueue::GetForCurrentThread()->GetLastError(); + latch.Signal(); + }); + latch.Wait(); + } // The script has completed and the engine may not be in a clean state, // so just stop the process.