Index: src/debug.cc |
diff --git a/src/debug.cc b/src/debug.cc |
index 3ecf8bada73ee24de75b07fadabd801c075b0299..4ae17a33a08f11b7eccfe5c9f67d8bfdd8e590f2 100644 |
--- a/src/debug.cc |
+++ b/src/debug.cc |
@@ -526,7 +526,7 @@ void Debug::ThreadInit() { |
thread_local_.after_break_target_ = 0; |
// TODO(isolates): frames_are_dropped_? |
thread_local_.debugger_entry_ = NULL; |
- thread_local_.pending_interrupts_ = 0; |
+ thread_local_.has_pending_interrupt_ = false; |
thread_local_.restarter_frame_function_pointer_ = NULL; |
} |
@@ -860,13 +860,6 @@ void Debug::Unload() { |
} |
-// Set the flag indicating that preemption happened during debugging. |
-void Debug::PreemptionWhileInDebugger() { |
- ASSERT(InDebugger()); |
- Debug::set_interrupts_pending(PREEMPT); |
-} |
- |
- |
Object* Debug::Break(Arguments args) { |
Heap* heap = isolate_->heap(); |
HandleScope scope(isolate_); |
@@ -2955,7 +2948,7 @@ void Debugger::ProcessDebugEvent(v8::DebugEvent event, |
// Clear any pending debug break if this is a real break. |
if (!auto_continue) { |
- isolate_->debug()->clear_interrupt_pending(DEBUGBREAK); |
+ isolate_->debug()->set_has_pending_interrupt(false); |
} |
// Create the execution state. |
@@ -3101,7 +3094,7 @@ void Debugger::NotifyMessageHandler(v8::DebugEvent event, |
// added. It should be enough to clear the flag only once while we are in the |
// debugger. |
ASSERT(isolate_->debug()->InDebugger()); |
- isolate_->stack_guard()->Continue(DEBUGCOMMAND); |
+ isolate_->stack_guard()->ClearDebugCommand(); |
// Notify the debugger that a debug event has occurred unless auto continue is |
// active in which case no event is send. |
@@ -3349,7 +3342,7 @@ void Debugger::ProcessCommand(Vector<const uint16_t> command, |
// Set the debug command break flag to have the command processed. |
if (!isolate_->debug()->InDebugger()) { |
- isolate_->stack_guard()->DebugCommand(); |
+ isolate_->stack_guard()->RequestDebugCommand(); |
} |
MessageDispatchHelperThread* dispatch_thread; |
@@ -3377,7 +3370,7 @@ void Debugger::EnqueueDebugCommand(v8::Debug::ClientData* client_data) { |
// Set the debug command break flag to have the command processed. |
if (!isolate_->debug()->InDebugger()) { |
- isolate_->stack_guard()->DebugCommand(); |
+ isolate_->stack_guard()->RequestDebugCommand(); |
} |
} |
@@ -3480,9 +3473,6 @@ EnterDebugger::EnterDebugger(Isolate* isolate) |
has_js_frames_(!it_.done()), |
save_(isolate_) { |
Debug* debug = isolate_->debug(); |
- ASSERT(prev_ != NULL || !debug->is_interrupt_pending(PREEMPT)); |
- ASSERT(prev_ != NULL || !debug->is_interrupt_pending(DEBUGBREAK)); |
- |
// Link recursive debugger entry. |
debug->set_debugger_entry(this); |
@@ -3523,30 +3513,24 @@ EnterDebugger::~EnterDebugger() { |
if (!isolate_->has_pending_exception()) { |
// Try to avoid any pending debug break breaking in the clear mirror |
// cache JavaScript code. |
- if (isolate_->stack_guard()->IsDebugBreak()) { |
- debug->set_interrupts_pending(DEBUGBREAK); |
- isolate_->stack_guard()->Continue(DEBUGBREAK); |
+ if (isolate_->stack_guard()->CheckDebugBreak()) { |
+ debug->set_has_pending_interrupt(true); |
+ isolate_->stack_guard()->ClearDebugBreak(); |
} |
debug->ClearMirrorCache(); |
} |
- // Request preemption and debug break when leaving the last debugger entry |
- // if any of these where recorded while debugging. |
- if (debug->is_interrupt_pending(PREEMPT)) { |
- // This re-scheduling of preemption is to avoid starvation in some |
- // debugging scenarios. |
- debug->clear_interrupt_pending(PREEMPT); |
- isolate_->stack_guard()->Preempt(); |
- } |
- if (debug->is_interrupt_pending(DEBUGBREAK)) { |
- debug->clear_interrupt_pending(DEBUGBREAK); |
- isolate_->stack_guard()->DebugBreak(); |
+ // Request debug break when leaving the last debugger entry |
+ // if one was recorded while debugging. |
+ if (debug->has_pending_interrupt()) { |
+ debug->set_has_pending_interrupt(false); |
+ isolate_->stack_guard()->RequestDebugBreak(); |
} |
// If there are commands in the queue when leaving the debugger request |
// that these commands are processed. |
if (isolate_->debugger()->HasCommands()) { |
- isolate_->stack_guard()->DebugCommand(); |
+ isolate_->stack_guard()->RequestDebugCommand(); |
} |
// If leaving the debugger with the debugger no longer active unload it. |