Chromium Code Reviews| Index: src/isolate.cc |
| diff --git a/src/isolate.cc b/src/isolate.cc |
| index e42d78ecdcba94ca9355b69b201fdbbf0fcbe092..88ccf5a1210df4ed11540c2ebdeb44545c891118 100644 |
| --- a/src/isolate.cc |
| +++ b/src/isolate.cc |
| @@ -310,6 +310,20 @@ Isolate::PerIsolateThreadData* |
| return per_thread; |
| } |
|
Vitaly Repeshko
2011/04/15 00:29:39
nit: Two blank lines between functions.
Dmitry Lomov
2011/04/19 01:50:47
Done.
|
| +Isolate::PerIsolateThreadData* Isolate::FindPerThreadDataForThisThread() { |
| + ThreadId thread_id = ThreadId::Current(); |
| + PerIsolateThreadData* per_thread = NULL; |
| + { |
| + ScopedLock lock(process_wide_mutex_); |
| + per_thread = thread_data_table_->Lookup(this, thread_id); |
| + } |
| + return per_thread; |
| +} |
| + |
| +void Isolate::EnsurePreinitializedForThisThread() { |
|
Vitaly Repeshko
2011/04/15 00:29:39
ForThisThread doesn't make much sense, since the i
Dmitry Lomov
2011/04/19 01:50:47
I just removed this.
|
| + ScopedLock lock(process_wide_mutex_); |
|
Vitaly Repeshko
2011/04/15 00:29:39
I don't think we really need a process-wide mutex
|
| + CHECK(PreInit()); |
| +} |
| void Isolate::EnsureDefaultIsolate() { |
| ScopedLock lock(process_wide_mutex_); |
| @@ -320,10 +334,12 @@ void Isolate::EnsureDefaultIsolate() { |
| thread_data_table_ = new Isolate::ThreadDataTable(); |
| default_isolate_ = new Isolate(); |
| } |
| + CHECK(default_isolate_->PreInit()); |
| // Can't use SetIsolateThreadLocals(default_isolate_, NULL) here |
| // becase a non-null thread data may be already set. |
| - Thread::SetThreadLocal(isolate_key_, default_isolate_); |
| - CHECK(default_isolate_->PreInit()); |
| + if (Thread::GetThreadLocal(isolate_key_) == NULL) { |
| + Thread::SetThreadLocal(isolate_key_, default_isolate_); |
| + } |
| } |
| @@ -640,8 +656,6 @@ bool Isolate::PreInit() { |
| TRACE_ISOLATE(preinit); |
| - ASSERT(Isolate::Current() == this); |
|
Vitaly Repeshko
2011/04/15 00:29:39
Removing this is dangerous (at least for now), bec
Dmitry Lomov
2011/04/19 01:50:47
Done.
|
| - |
| #ifdef ENABLE_DEBUGGER_SUPPORT |
| debug_ = new Debug(this); |
| debugger_ = new Debugger(); |
| @@ -658,7 +672,7 @@ bool Isolate::PreInit() { |
| heap_.SetStackLimits(); |
| #ifdef DEBUG |
| - DisallowAllocationFailure disallow_allocation_failure; |
| + DisallowAllocationFailure disallow_allocation_failure(&heap_); |
| #endif |
| #define C(name) isolate_addresses_[Isolate::k_##name] = \ |
| @@ -681,9 +695,8 @@ bool Isolate::PreInit() { |
| write_input_buffer_ = new StringInputBuffer(); |
| global_handles_ = new GlobalHandles(this); |
| bootstrapper_ = new Bootstrapper(); |
| - handle_scope_implementer_ = new HandleScopeImplementer(); |
| + handle_scope_implementer_ = new HandleScopeImplementer(this); |
| stub_cache_ = new StubCache(this); |
| - ast_sentinels_ = new AstSentinels(); |
| regexp_stack_ = new RegExpStack(); |
| regexp_stack_->isolate_ = this; |
| @@ -698,6 +711,7 @@ bool Isolate::PreInit() { |
| void Isolate::InitializeThreadLocal() { |
| + thread_local_top_.isolate_ = this; |
| thread_local_top_.Initialize(); |
| clear_pending_exception(); |
| clear_pending_message(); |
| @@ -741,11 +755,14 @@ bool Isolate::Init(Deserializer* des) { |
| #ifdef DEBUG |
| // The initialization process does not handle memory exhaustion. |
| - DisallowAllocationFailure disallow_allocation_failure; |
| + DisallowAllocationFailure disallow_allocation_failure(&heap_); |
| #endif |
| if (state_ == UNINITIALIZED && !PreInit()) return false; |
| + // AstSentinels initialization requires Isolate::Current to be set |
| + ast_sentinels_ = new AstSentinels(); |
| + |
| // Enable logging before setting up the heap |
| logger_->Setup(); |