| 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);
 | 
|  }
 | 
| 
 |