Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: src/debug.cc

Issue 309533009: Release execution lock before dispatching interrupt handling. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: small fix to rebase mistake Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | src/execution.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "v8.h" 5 #include "v8.h"
6 6
7 #include "api.h" 7 #include "api.h"
8 #include "arguments.h" 8 #include "arguments.h"
9 #include "bootstrapper.h" 9 #include "bootstrapper.h"
10 #include "code-stubs.h" 10 #include "code-stubs.h"
(...skipping 2523 matching lines...) Expand 10 before | Expand all | Expand 10 after
2534 2534
2535 MaybeHandle<Object> Debug::MakeJSObject(const char* constructor_name, 2535 MaybeHandle<Object> Debug::MakeJSObject(const char* constructor_name,
2536 int argc, 2536 int argc,
2537 Handle<Object> argv[]) { 2537 Handle<Object> argv[]) {
2538 ASSERT(isolate_->context() == *debug_context()); 2538 ASSERT(isolate_->context() == *debug_context());
2539 // Create the execution state object. 2539 // Create the execution state object.
2540 Handle<Object> constructor = Object::GetProperty( 2540 Handle<Object> constructor = Object::GetProperty(
2541 isolate_, isolate_->global_object(), constructor_name).ToHandleChecked(); 2541 isolate_, isolate_->global_object(), constructor_name).ToHandleChecked();
2542 ASSERT(constructor->IsJSFunction()); 2542 ASSERT(constructor->IsJSFunction());
2543 if (!constructor->IsJSFunction()) return MaybeHandle<Object>(); 2543 if (!constructor->IsJSFunction()) return MaybeHandle<Object>();
2544 // We do not handle interrupts here. In particular, termination interrupts.
2545 PostponeInterruptsScope no_interrupts(isolate_);
2544 return Execution::TryCall(Handle<JSFunction>::cast(constructor), 2546 return Execution::TryCall(Handle<JSFunction>::cast(constructor),
2545 Handle<JSObject>(debug_context()->global_object()), 2547 Handle<JSObject>(debug_context()->global_object()),
2546 argc, 2548 argc,
2547 argv); 2549 argv);
2548 } 2550 }
2549 2551
2550 2552
2551 MaybeHandle<Object> Debug::MakeExecutionState() { 2553 MaybeHandle<Object> Debug::MakeExecutionState() {
2552 // Create the execution state object. 2554 // Create the execution state object.
2553 Handle<Object> argv[] = { isolate_->factory()->NewNumberFromInt(break_id()) }; 2555 Handle<Object> argv[] = { isolate_->factory()->NewNumberFromInt(break_id()) };
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
2845 EnterDebugger debugger(isolate_); 2847 EnterDebugger debugger(isolate_);
2846 // The global handle may be destroyed soon after. Return it reboxed. 2848 // The global handle may be destroyed soon after. Return it reboxed.
2847 return handle(*debug_context(), isolate_); 2849 return handle(*debug_context(), isolate_);
2848 } 2850 }
2849 2851
2850 2852
2851 void Debug::NotifyMessageHandler(v8::DebugEvent event, 2853 void Debug::NotifyMessageHandler(v8::DebugEvent event,
2852 Handle<JSObject> exec_state, 2854 Handle<JSObject> exec_state,
2853 Handle<JSObject> event_data, 2855 Handle<JSObject> event_data,
2854 bool auto_continue) { 2856 bool auto_continue) {
2857 // Prevent other interrupts from triggering, for example API callbacks,
2858 // while dispatching message handler callbacks.
2859 PostponeInterruptsScope no_interrupts(isolate_);
2855 ASSERT(is_active_); 2860 ASSERT(is_active_);
2856 HandleScope scope(isolate_); 2861 HandleScope scope(isolate_);
2857 // Process the individual events. 2862 // Process the individual events.
2858 bool sendEventMessage = false; 2863 bool sendEventMessage = false;
2859 switch (event) { 2864 switch (event) {
2860 case v8::Break: 2865 case v8::Break:
2861 case v8::BreakForCommand: 2866 case v8::BreakForCommand:
2862 sendEventMessage = !auto_continue; 2867 sendEventMessage = !auto_continue;
2863 break; 2868 break;
2864 case v8::Exception: 2869 case v8::Exception:
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after
3451 logger_->DebugEvent("Put", message.text()); 3456 logger_->DebugEvent("Put", message.text());
3452 } 3457 }
3453 3458
3454 3459
3455 void LockingCommandMessageQueue::Clear() { 3460 void LockingCommandMessageQueue::Clear() {
3456 LockGuard<Mutex> lock_guard(&mutex_); 3461 LockGuard<Mutex> lock_guard(&mutex_);
3457 queue_.Clear(); 3462 queue_.Clear();
3458 } 3463 }
3459 3464
3460 } } // namespace v8::internal 3465 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | src/execution.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698