Index: runtime/vm/isolate.cc |
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc |
index 6f30de5905f7089a4b39c358de419302b5e630c9..879162b64d8e52bc95fbaf96bc552a7fb1637074 100644 |
--- a/runtime/vm/isolate.cc |
+++ b/runtime/vm/isolate.cc |
@@ -621,9 +621,9 @@ bool IsolateMessageHandler::IsCurrentIsolate() const { |
} |
-static MessageHandler::MessageStatus StoreError(Isolate* isolate, |
+static MessageHandler::MessageStatus StoreError(Thread* thread, |
const Error& error) { |
- isolate->object_store()->set_sticky_error(error); |
+ thread->set_sticky_error(error); |
if (error.IsUnwindError()) { |
const UnwindError& unwind = UnwindError::Cast(error); |
if (!unwind.is_user_initiated()) { |
@@ -680,14 +680,14 @@ MessageHandler::MessageStatus IsolateMessageHandler::ProcessUnhandledException( |
if (result.IsUnwindError()) { |
// When unwinding we don't notify error listeners and we ignore |
// whether errors are fatal for the current isolate. |
- return StoreError(I, result); |
+ return StoreError(T, result); |
} else { |
bool has_listener = I->NotifyErrorListeners(exc_str, stacktrace_str); |
if (I->ErrorsFatal()) { |
if (has_listener) { |
- I->object_store()->clear_sticky_error(); |
+ T->clear_sticky_error(); |
} else { |
- I->object_store()->set_sticky_error(result); |
+ T->set_sticky_error(result); |
} |
return kError; |
} |
@@ -1354,8 +1354,7 @@ static MessageHandler::MessageStatus RunIsolate(uword parameter) { |
if (!ClassFinalizer::ProcessPendingClasses()) { |
// Error is in sticky error already. |
#if defined(DEBUG) |
- const Error& error = |
- Error::Handle(isolate->object_store()->sticky_error()); |
+ const Error& error = Error::Handle(thread->sticky_error()); |
ASSERT(!error.IsUnwindError()); |
#endif |
return MessageHandler::kError; |
@@ -1365,7 +1364,7 @@ static MessageHandler::MessageStatus RunIsolate(uword parameter) { |
result = state->ResolveFunction(); |
bool is_spawn_uri = state->is_spawn_uri(); |
if (result.IsError()) { |
- return StoreError(isolate, Error::Cast(result)); |
+ return StoreError(thread, Error::Cast(result)); |
} |
ASSERT(result.IsFunction()); |
Function& func = Function::Handle(thread->zone()); |
@@ -1420,7 +1419,7 @@ static MessageHandler::MessageStatus RunIsolate(uword parameter) { |
result = DartEntry::InvokeFunction(entry_point, args); |
if (result.IsError()) { |
- return StoreError(isolate, Error::Cast(result)); |
+ return StoreError(thread, Error::Cast(result)); |
} |
} |
return MessageHandler::kOK; |
@@ -1440,7 +1439,7 @@ static void ShutdownIsolate(uword parameter) { |
ASSERT(thread->isolate() == isolate); |
StackZone zone(thread); |
HandleScope handle_scope(thread); |
- const Error& error = Error::Handle(isolate->object_store()->sticky_error()); |
+ const Error& error = Error::Handle(thread->sticky_error()); |
if (!error.IsNull() && !error.IsUnwindError()) { |
OS::PrintErr("in ShutdownIsolate: %s\n", error.ToErrorCString()); |
} |
@@ -1490,9 +1489,10 @@ RawError* Isolate::HandleInterrupts() { |
OS::Print("[!] Terminating isolate due to OOB message:\n" |
"\tisolate: %s\n", name()); |
} |
- const Error& error = Error::Handle(object_store()->sticky_error()); |
+ Thread* thread = Thread::Current(); |
+ const Error& error = Error::Handle(thread->sticky_error()); |
ASSERT(!error.IsNull() && error.IsUnwindError()); |
- object_store()->clear_sticky_error(); |
+ thread->clear_sticky_error(); |
return error.raw(); |
} |
} |
@@ -1589,7 +1589,7 @@ void Isolate::LowLevelShutdown() { |
// Notify exit listeners that this isolate is shutting down. |
if (object_store() != NULL) { |
- const Error& error = Error::Handle(object_store()->sticky_error()); |
+ const Error& error = Error::Handle(thread->sticky_error()); |
if (error.IsNull() || |
!error.IsUnwindError() || |
UnwindError::Cast(error).is_user_initiated()) { |
@@ -1881,8 +1881,8 @@ void Isolate::PrintJSON(JSONStream* stream, bool ref) { |
JSONObject tagCounters(&jsobj, "_tagCounters"); |
vm_tag_counters()->PrintToJSONObject(&tagCounters); |
} |
- if (object_store()->sticky_error() != Object::null()) { |
- Error& error = Error::Handle(object_store()->sticky_error()); |
+ if (Thread::Current()->sticky_error() != Object::null()) { |
+ Error& error = Error::Handle(Thread::Current()->sticky_error()); |
ASSERT(!error.IsNull()); |
jsobj.AddProperty("error", error, false); |
} |