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); |
+ |
+ 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, ()); |