Chromium Code Reviews| Index: third_party/WebKit/Source/platform/heap/ThreadState.cpp |
| diff --git a/third_party/WebKit/Source/platform/heap/ThreadState.cpp b/third_party/WebKit/Source/platform/heap/ThreadState.cpp |
| index 5dade81422fb90875c853471da1f73fa91d9e779..1d476723a36e1c3bc1dea8a0f526dae1cccfa823 100644 |
| --- a/third_party/WebKit/Source/platform/heap/ThreadState.cpp |
| +++ b/third_party/WebKit/Source/platform/heap/ThreadState.cpp |
| @@ -104,6 +104,9 @@ ThreadState::ThreadState() |
| #if defined(ADDRESS_SANITIZER) |
| , m_asanFakeStack(__asan_get_current_fake_stack()) |
| #endif |
| +#if defined(LEAK_SANITIZER) |
| + , m_disabledStaticPersistentsRegistration(0) |
| +#endif |
| { |
| ASSERT(checkThread()); |
| ASSERT(!**s_threadSpecific); |
| @@ -1317,6 +1320,36 @@ void ThreadState::removeInterruptor(BlinkGCInterruptor* interruptor) |
| } |
| } |
| +#if defined(LEAK_SANITIZER) |
| +void ThreadState::registerStaticPersistentNode(PersistentNode* node) |
| +{ |
| + if (m_disabledStaticPersistentsRegistration) |
| + return; |
| + |
| + ASSERT(!m_staticPersistents.contains(node)); |
| + m_staticPersistents.add(node); |
| +} |
| + |
| +void ThreadState::releaseStaticPersistentNodes() |
| +{ |
| + for (PersistentNode* node : m_staticPersistents) |
| + persistentRegion()->freePersistentNode(node); |
|
haraken
2015/12/07 14:46:10
After calling this, all static Persistent handles
sof
2015/12/07 16:59:17
Intentional to handle it that way; the sweeping ph
|
| + |
| + m_staticPersistents.clear(); |
| +} |
| + |
| +void ThreadState::enterStaticReferenceRegistrationDisabledScope() |
| +{ |
| + m_disabledStaticPersistentsRegistration++; |
| +} |
| + |
| +void ThreadState::leaveStaticReferenceRegistrationDisabledScope() |
| +{ |
| + ASSERT(m_disabledStaticPersistentsRegistration); |
| + m_disabledStaticPersistentsRegistration--; |
| +} |
| +#endif |
| + |
| ThreadState::AttachedThreadStateSet& ThreadState::attachedThreads() |
| { |
| DEFINE_STATIC_LOCAL(AttachedThreadStateSet, threads, ()); |