Chromium Code Reviews| Index: runtime/vm/debugger.cc |
| diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc |
| index 0b614586061f31bab6b77c0fff21fa58e02ea47a..b700aee5b932f1fecc1a6bb955918cfb2a2831a9 100644 |
| --- a/runtime/vm/debugger.cc |
| +++ b/runtime/vm/debugger.cc |
| @@ -310,9 +310,16 @@ void Debugger::InvokeEventHandler(DebuggerEvent* event) { |
| if (ServiceNeedsDebuggerEvent(event->type()) && event->IsPauseEvent()) { |
| // If we were paused, notify the service that we have resumed. |
| - ServiceEvent service_event(event->isolate(), ServiceEvent::kResume); |
| - service_event.set_top_frame(event->top_frame()); |
| - Service::HandleEvent(&service_event); |
| + const Error& error = |
| + Error::Handle(isolate_, isolate_->object_store()->sticky_error()); |
| + ASSERT(error.IsNull() || error.IsUnwindError()); |
| + |
| + // Don't send a resume event when the isolate is unwinding. |
| + if (!error.IsUnwindError()) { |
|
Cutch
2015/10/05 18:10:46
Based on the comment I would expect to see:
if (e
turnidge
2015/10/05 22:18:24
Changed the sense of the comment. For some reason
|
| + ServiceEvent service_event(event->isolate(), ServiceEvent::kResume); |
| + service_event.set_top_frame(event->top_frame()); |
| + Service::HandleEvent(&service_event); |
| + } |
| } |
| } |
| @@ -350,9 +357,6 @@ RawError* Debugger::SignalIsolateInterrupted() { |
| OS::Print("[!] Embedder api: terminating isolate:\n" |
| "\tisolate: %s\n", isolate_->name()); |
| } |
| - // TODO(turnidge): We should give the message handler a way to |
| - // detect when an isolate is unwinding. |
| - isolate_->message_handler()->set_pause_on_exit(false); |
| const String& msg = |
| String::Handle(String::New("isolate terminated by embedder")); |
| return UnwindError::New(msg); |
| @@ -362,6 +366,7 @@ RawError* Debugger::SignalIsolateInterrupted() { |
| // If any error occurred while in the debug message loop, return it here. |
| const Error& error = |
| Error::Handle(isolate_, isolate_->object_store()->sticky_error()); |
| + ASSERT(error.IsNull() || error.IsUnwindError()); |
| isolate_->object_store()->clear_sticky_error(); |
| return error.raw(); |
| } |