| Index: src/isolate.cc | 
| diff --git a/src/isolate.cc b/src/isolate.cc | 
| index 05f87922f16e2444a9d085ba12156593bc9f751c..99f9c069aef32278014ec9da8df7144cbf46ba91 100644 | 
| --- a/src/isolate.cc | 
| +++ b/src/isolate.cc | 
| @@ -46,6 +46,7 @@ int ThreadId::AllocateThreadId() { | 
|  | 
|  | 
| int ThreadId::GetCurrentThreadId() { | 
| +  Isolate::EnsureInitialized(); | 
| int thread_id = base::Thread::GetThreadLocalInt(Isolate::thread_id_key_); | 
| if (thread_id == 0) { | 
| thread_id = AllocateThreadId(); | 
| @@ -104,24 +105,17 @@ base::Thread::LocalStorageKey Isolate::per_isolate_thread_data_key_; | 
| #ifdef DEBUG | 
| base::Thread::LocalStorageKey PerThreadAssertScopeBase::thread_local_key; | 
| #endif  // DEBUG | 
| -base::Mutex Isolate::process_wide_mutex_; | 
| -// TODO(dcarney): Remove with default isolate. | 
| -enum DefaultIsolateStatus { | 
| -  kDefaultIsolateUninitialized, | 
| -  kDefaultIsolateInitialized, | 
| -  kDefaultIsolateCrashIfInitialized | 
| -}; | 
| -static DefaultIsolateStatus default_isolate_status_ | 
| -    = kDefaultIsolateUninitialized; | 
| +base::LazyMutex Isolate::process_wide_mutex_ = LAZY_MUTEX_INITIALIZER; | 
| Isolate::ThreadDataTable* Isolate::thread_data_table_ = NULL; | 
| base::Atomic32 Isolate::isolate_counter_ = 0; | 
|  | 
| Isolate::PerIsolateThreadData* | 
| Isolate::FindOrAllocatePerThreadDataForThisThread() { | 
| +  EnsureInitialized(); | 
| ThreadId thread_id = ThreadId::Current(); | 
| PerIsolateThreadData* per_thread = NULL; | 
| { | 
| -    base::LockGuard<base::Mutex> lock_guard(&process_wide_mutex_); | 
| +    base::LockGuard<base::Mutex> lock_guard(process_wide_mutex_.Pointer()); | 
| per_thread = thread_data_table_->Lookup(this, thread_id); | 
| if (per_thread == NULL) { | 
| per_thread = new PerIsolateThreadData(this, thread_id); | 
| @@ -141,25 +135,18 @@ Isolate::PerIsolateThreadData* Isolate::FindPerThreadDataForThisThread() { | 
|  | 
| Isolate::PerIsolateThreadData* Isolate::FindPerThreadDataForThread( | 
| ThreadId thread_id) { | 
| +  EnsureInitialized(); | 
| PerIsolateThreadData* per_thread = NULL; | 
| { | 
| -    base::LockGuard<base::Mutex> lock_guard(&process_wide_mutex_); | 
| +    base::LockGuard<base::Mutex> lock_guard(process_wide_mutex_.Pointer()); | 
| per_thread = thread_data_table_->Lookup(this, thread_id); | 
| } | 
| return per_thread; | 
| } | 
|  | 
|  | 
| -void Isolate::SetCrashIfDefaultIsolateInitialized() { | 
| -  base::LockGuard<base::Mutex> lock_guard(&process_wide_mutex_); | 
| -  CHECK(default_isolate_status_ != kDefaultIsolateInitialized); | 
| -  default_isolate_status_ = kDefaultIsolateCrashIfInitialized; | 
| -} | 
| - | 
| - | 
| -void Isolate::EnsureDefaultIsolate() { | 
| -  base::LockGuard<base::Mutex> lock_guard(&process_wide_mutex_); | 
| -  CHECK(default_isolate_status_ != kDefaultIsolateCrashIfInitialized); | 
| +void Isolate::EnsureInitialized() { | 
| +  base::LockGuard<base::Mutex> lock_guard(process_wide_mutex_.Pointer()); | 
| if (thread_data_table_ == NULL) { | 
| isolate_key_ = base::Thread::CreateThreadLocalKey(); | 
| thread_id_key_ = base::Thread::CreateThreadLocalKey(); | 
| @@ -172,12 +159,6 @@ void Isolate::EnsureDefaultIsolate() { | 
| } | 
| } | 
|  | 
| -struct StaticInitializer { | 
| -  StaticInitializer() { | 
| -    Isolate::EnsureDefaultIsolate(); | 
| -  } | 
| -} static_initializer; | 
| - | 
|  | 
| Address Isolate::get_address_from_id(Isolate::AddressId id) { | 
| return isolate_addresses_[id]; | 
| @@ -1527,7 +1508,7 @@ void Isolate::TearDown() { | 
|  | 
| Deinit(); | 
|  | 
| -  { base::LockGuard<base::Mutex> lock_guard(&process_wide_mutex_); | 
| +  { base::LockGuard<base::Mutex> lock_guard(process_wide_mutex_.Pointer()); | 
| thread_data_table_->RemoveAllThreads(this); | 
| } | 
|  | 
| @@ -1628,6 +1609,7 @@ void Isolate::PushToPartialSnapshotCache(Object* obj) { | 
|  | 
| void Isolate::SetIsolateThreadLocals(Isolate* isolate, | 
| PerIsolateThreadData* data) { | 
| +  EnsureInitialized(); | 
| base::Thread::SetThreadLocal(isolate_key_, isolate); | 
| base::Thread::SetThreadLocal(per_isolate_thread_data_key_, data); | 
| } | 
|  |