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