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