| Index: src/debug.cc | 
| diff --git a/src/debug.cc b/src/debug.cc | 
| index 80885da730deaa878c3ca65f893c4858e60c04ef..a0b9884410f289302d7d74be6e65bfb62ef1a413 100644 | 
| --- a/src/debug.cc | 
| +++ b/src/debug.cc | 
| @@ -2606,6 +2606,7 @@ Debugger::Debugger(Isolate* isolate) | 
| message_handler_(NULL), | 
| debugger_unload_pending_(false), | 
| host_dispatch_handler_(NULL), | 
| +      dispatch_handler_access_(OS::CreateMutex()), | 
| debug_message_dispatch_handler_(NULL), | 
| message_dispatch_helper_thread_(NULL), | 
| host_dispatch_micros_(100 * 1000), | 
| @@ -2618,6 +2619,8 @@ Debugger::Debugger(Isolate* isolate) | 
|  | 
|  | 
| Debugger::~Debugger() { | 
| +  delete dispatch_handler_access_; | 
| +  dispatch_handler_access_ = 0; | 
| delete command_received_; | 
| command_received_ = 0; | 
| } | 
| @@ -3300,7 +3303,7 @@ void Debugger::SetHostDispatchHandler(v8::Debug::HostDispatchHandler handler, | 
|  | 
| void Debugger::SetDebugMessageDispatchHandler( | 
| v8::Debug::DebugMessageDispatchHandler handler, bool provide_locker) { | 
| -  ScopedLock with(&dispatch_handler_access_); | 
| +  ScopedLock with(dispatch_handler_access_); | 
| debug_message_dispatch_handler_ = handler; | 
|  | 
| if (provide_locker && message_dispatch_helper_thread_ == NULL) { | 
| @@ -3343,7 +3346,7 @@ void Debugger::ProcessCommand(Vector<const uint16_t> command, | 
|  | 
| MessageDispatchHelperThread* dispatch_thread; | 
| { | 
| -    ScopedLock with(&dispatch_handler_access_); | 
| +    ScopedLock with(dispatch_handler_access_); | 
| dispatch_thread = message_dispatch_helper_thread_; | 
| } | 
|  | 
| @@ -3463,7 +3466,7 @@ void Debugger::WaitForAgent() { | 
| void Debugger::CallMessageDispatchHandler() { | 
| v8::Debug::DebugMessageDispatchHandler handler; | 
| { | 
| -    ScopedLock with(&dispatch_handler_access_); | 
| +    ScopedLock with(dispatch_handler_access_); | 
| handler = Debugger::debug_message_dispatch_handler_; | 
| } | 
| if (handler != NULL) { | 
| @@ -3784,20 +3787,24 @@ void CommandMessageQueue::Expand() { | 
|  | 
|  | 
| LockingCommandMessageQueue::LockingCommandMessageQueue(Logger* logger, int size) | 
| -    : logger_(logger), queue_(size) {} | 
| +    : logger_(logger), queue_(size) { | 
| +  lock_ = OS::CreateMutex(); | 
| +} | 
|  | 
|  | 
| -LockingCommandMessageQueue::~LockingCommandMessageQueue() {} | 
| +LockingCommandMessageQueue::~LockingCommandMessageQueue() { | 
| +  delete lock_; | 
| +} | 
|  | 
|  | 
| -bool LockingCommandMessageQueue::IsEmpty() { | 
| -  ScopedLock sl(&lock_); | 
| +bool LockingCommandMessageQueue::IsEmpty() const { | 
| +  ScopedLock sl(lock_); | 
| return queue_.IsEmpty(); | 
| } | 
|  | 
|  | 
| CommandMessage LockingCommandMessageQueue::Get() { | 
| -  ScopedLock sl(&lock_); | 
| +  ScopedLock sl(lock_); | 
| CommandMessage result = queue_.Get(); | 
| logger_->DebugEvent("Get", result.text()); | 
| return result; | 
| @@ -3805,14 +3812,14 @@ CommandMessage LockingCommandMessageQueue::Get() { | 
|  | 
|  | 
| void LockingCommandMessageQueue::Put(const CommandMessage& message) { | 
| -  ScopedLock sl(&lock_); | 
| +  ScopedLock sl(lock_); | 
| queue_.Put(message); | 
| logger_->DebugEvent("Put", message.text()); | 
| } | 
|  | 
|  | 
| void LockingCommandMessageQueue::Clear() { | 
| -  ScopedLock sl(&lock_); | 
| +  ScopedLock sl(lock_); | 
| queue_.Clear(); | 
| } | 
|  | 
| @@ -3820,17 +3827,19 @@ void LockingCommandMessageQueue::Clear() { | 
| MessageDispatchHelperThread::MessageDispatchHelperThread(Isolate* isolate) | 
| : Thread("v8:MsgDispHelpr"), | 
| isolate_(isolate), sem_(OS::CreateSemaphore(0)), | 
| -      already_signalled_(false) {} | 
| +      mutex_(OS::CreateMutex()), already_signalled_(false) { | 
| +} | 
|  | 
|  | 
| MessageDispatchHelperThread::~MessageDispatchHelperThread() { | 
| +  delete mutex_; | 
| delete sem_; | 
| } | 
|  | 
|  | 
| void MessageDispatchHelperThread::Schedule() { | 
| { | 
| -    ScopedLock lock(&mutex_); | 
| +    ScopedLock lock(mutex_); | 
| if (already_signalled_) { | 
| return; | 
| } | 
| @@ -3844,7 +3853,7 @@ void MessageDispatchHelperThread::Run() { | 
| while (true) { | 
| sem_->Wait(); | 
| { | 
| -      ScopedLock lock(&mutex_); | 
| +      ScopedLock lock(mutex_); | 
| already_signalled_ = false; | 
| } | 
| { | 
|  |