| Index: src/v8threads.cc | 
| diff --git a/src/v8threads.cc b/src/v8threads.cc | 
| index 32ea5e197c483ff0b018e3b9a68a223f5b1432ce..925e1982c0dcb81402d57882a5ef2df7ae359b02 100644 | 
| --- a/src/v8threads.cc | 
| +++ b/src/v8threads.cc | 
| @@ -42,15 +42,18 @@ namespace v8 { | 
| bool Locker::active_ = false; | 
|  | 
|  | 
| -// Constructor for the Locker object.  Once the Locker is constructed the | 
| -// current thread will be guaranteed to have the lock for a given isolate. | 
| -Locker::Locker(v8::Isolate* isolate) | 
| -  : has_lock_(false), | 
| -    top_level_(true), | 
| -    isolate_(reinterpret_cast<i::Isolate*>(isolate)) { | 
| -  if (isolate_ == NULL) { | 
| -    isolate_ = i::Isolate::GetDefaultIsolateForLocking(); | 
| -  } | 
| +Locker::Locker() { | 
| +  Initialize(i::Isolate::GetDefaultIsolateForLocking()); | 
| +} | 
| + | 
| + | 
| +// Once the Locker is initialized, the current thread will be guaranteed to have | 
| +// the lock for a given isolate. | 
| +void Locker::Initialize(v8::Isolate* isolate) { | 
| +  ASSERT(isolate != NULL); | 
| +  has_lock_= false; | 
| +  top_level_ = true; | 
| +  isolate_ = reinterpret_cast<i::Isolate*>(isolate); | 
| // Record that the Locker has been used at least once. | 
| active_ = true; | 
| // Get the big lock if necessary. | 
| @@ -86,10 +89,8 @@ Locker::Locker(v8::Isolate* isolate) | 
|  | 
|  | 
| bool Locker::IsLocked(v8::Isolate* isolate) { | 
| +  ASSERT(isolate != NULL); | 
| i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); | 
| -  if (internal_isolate == NULL) { | 
| -    internal_isolate = i::Isolate::GetDefaultIsolateForLocking(); | 
| -  } | 
| return internal_isolate->thread_manager()->IsLockedByCurrentThread(); | 
| } | 
|  | 
| @@ -115,11 +116,14 @@ Locker::~Locker() { | 
| } | 
|  | 
|  | 
| -Unlocker::Unlocker(v8::Isolate* isolate) | 
| -  : isolate_(reinterpret_cast<i::Isolate*>(isolate)) { | 
| -  if (isolate_ == NULL) { | 
| -    isolate_ = i::Isolate::GetDefaultIsolateForLocking(); | 
| -  } | 
| +Unlocker::Unlocker() { | 
| +  Initialize(i::Isolate::GetDefaultIsolateForLocking()); | 
| +} | 
| + | 
| + | 
| +void Unlocker::Initialize(v8::Isolate* isolate) { | 
| +  ASSERT(isolate != NULL); | 
| +  isolate_ = reinterpret_cast<i::Isolate*>(isolate); | 
| ASSERT(isolate_->thread_manager()->IsLockedByCurrentThread()); | 
| if (isolate_->IsDefaultIsolate()) { | 
| isolate_->Exit(); | 
| @@ -479,7 +483,7 @@ void ContextSwitcher::Run() { | 
|  | 
| // Acknowledge the preemption by the receiving thread. | 
| void ContextSwitcher::PreemptionReceived() { | 
| -  ASSERT(Locker::IsLocked()); | 
| +  ASSERT(Locker::IsLocked(i::Isolate::GetDefaultIsolateForLocking())); | 
| // There is currently no accounting being done for this. But could be in the | 
| // future, which is why we leave this in. | 
| } | 
|  |