Index: src/assert-scope.h |
diff --git a/src/assert-scope.h b/src/assert-scope.h |
index e2ec542a7708230af2bee1fc4f4840218afd967e..9ccb56bef0a3f7641792d18f41d9abd865882b3a 100644 |
--- a/src/assert-scope.h |
+++ b/src/assert-scope.h |
@@ -79,7 +79,11 @@ class PerThreadAssertScopeBase { |
protected: |
PerThreadAssertScopeBase() { |
- data_ = AssertData(); |
+ data_ = GetAssertData(); |
+ if (data_ == NULL) { |
+ data_ = new PerThreadAssertData(); |
+ SetThreadLocalData(data_); |
+ } |
data_->increment_level(); |
} |
@@ -89,22 +93,22 @@ class PerThreadAssertScopeBase { |
ASSERT(data_->get(static_cast<PerThreadAssertType>(i))); |
} |
delete data_; |
- Thread::SetThreadLocal(thread_local_key, NULL); |
+ SetThreadLocalData(NULL); |
} |
- static PerThreadAssertData* AssertData() { |
- PerThreadAssertData* data = reinterpret_cast<PerThreadAssertData*>( |
- Thread::GetThreadLocal(thread_local_key)); |
- if (data == NULL) { |
- data = new PerThreadAssertData(); |
- Thread::SetThreadLocal(thread_local_key, data); |
- } |
- return data; |
+ static PerThreadAssertData* GetAssertData() { |
+ return reinterpret_cast<PerThreadAssertData*>( |
+ Thread::GetThreadLocal(thread_local_key)); |
} |
static Thread::LocalStorageKey thread_local_key; |
PerThreadAssertData* data_; |
friend class Isolate; |
+ |
+ private: |
+ void SetThreadLocalData(PerThreadAssertData* data) { |
Sven Panne
2013/06/13 06:11:38
nit: add "static"
|
+ Thread::SetThreadLocal(thread_local_key, data); |
+ } |
#endif // DEBUG |
}; |
@@ -124,7 +128,10 @@ class PerThreadAssertScope : public PerThreadAssertScopeBase { |
~PerThreadAssertScope() { data_->set(type, old_state_); } |
- static bool IsAllowed() { return AssertData()->get(type); } |
+ static bool IsAllowed() { |
+ PerThreadAssertData* data = GetAssertData(); |
+ return data == NULL || data->get(type); |
+ } |
private: |
bool old_state_; |