Index: runtime/vm/isolate.cc |
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc |
index b473061aadc884ff94fc990da3ccb0d03c245284..5b9f0709e4f4d0a6c7fae06be76b97b3af152aa8 100644 |
--- a/runtime/vm/isolate.cc |
+++ b/runtime/vm/isolate.cc |
@@ -314,8 +314,7 @@ RawError* IsolateMessageHandler::HandleLibMessage(const Array& message) { |
break; |
} |
case Isolate::kKillMsg: |
- case Isolate::kInternalKillMsg: |
- case Isolate::kVMRestartMsg: { |
+ case Isolate::kInternalKillMsg: { |
// [ OOB, kKillMsg, terminate capability, priority ] |
if (message.Length() != 4) return Error::null(); |
Object& obj = Object::Handle(zone, message.At(3)); |
@@ -336,16 +335,6 @@ RawError* IsolateMessageHandler::HandleLibMessage(const Array& message) { |
const String& msg = |
String::Handle(String::New("isolate terminated by vm")); |
return UnwindError::New(msg); |
- } else if (msg_type == Isolate::kVMRestartMsg) { |
- // If this is the main isolate, this request to restart |
- // will be caught and handled in the embedder. Otherwise |
- // this unwind error will cause the isolate to exit. |
- const String& msg = String::Handle( |
- String::New("isolate terminated for vm restart")); |
- const UnwindError& error = |
- UnwindError::Handle(UnwindError::New(msg)); |
- error.set_is_vm_restart(true); |
- return error.raw(); |
} else { |
UNREACHABLE(); |
} |
@@ -531,7 +520,11 @@ MessageHandler::MessageStatus IsolateMessageHandler::HandleMessage( |
switch (Smi::Cast(oob_tag).Value()) { |
case Message::kServiceOOBMsg: { |
if (FLAG_support_service) { |
- Service::HandleIsolateMessage(I, oob_msg); |
+ const Error& error = |
+ Error::Handle(Service::HandleIsolateMessage(I, oob_msg)); |
+ if (!error.IsNull()) { |
+ status = ProcessUnhandledException(error); |
+ } |
} else { |
UNREACHABLE(); |
} |
@@ -650,11 +643,7 @@ static MessageHandler::MessageStatus StoreError(Thread* thread, |
if (error.IsUnwindError()) { |
const UnwindError& unwind = UnwindError::Cast(error); |
if (!unwind.is_user_initiated()) { |
- if (unwind.is_vm_restart()) { |
- return MessageHandler::kRestart; |
- } else { |
- return MessageHandler::kShutdown; |
- } |
+ return MessageHandler::kShutdown; |
} |
} |
return MessageHandler::kError; |
@@ -1033,18 +1022,24 @@ bool Isolate::IsPaused() const { |
} |
-void Isolate::PausePostRequest() { |
+RawError* Isolate::PausePostRequest() { |
if (!FLAG_support_debugger) { |
- return; |
+ return Error::null(); |
} |
if (debugger_ == NULL) { |
- return; |
+ return Error::null(); |
} |
ASSERT(!IsPaused()); |
const Error& error = Error::Handle(debugger_->PausePostRequest()); |
if (!error.IsNull()) { |
- Exceptions::PropagateError(error); |
+ if (Thread::Current()->top_exit_frame_info() == 0) { |
+ return error.raw(); |
+ } else { |
+ Exceptions::PropagateError(error); |
+ UNREACHABLE(); |
+ } |
} |
+ return Error::null(); |
} |