Chromium Code Reviews

Unified Diff: Source/platform/heap/ThreadState.cpp

Issue 1275863002: Oilpan: catch some self-referential leaks (main thread.) (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
« no previous file with comments | « Source/platform/heap/ThreadState.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/platform/heap/ThreadState.cpp
diff --git a/Source/platform/heap/ThreadState.cpp b/Source/platform/heap/ThreadState.cpp
index f751bba454a88eeb6e42e80aaae8a002596dcfe4..0f65d307702d0f0c9242eb3b6a5399b2e718c00f 100644
--- a/Source/platform/heap/ThreadState.cpp
+++ b/Source/platform/heap/ThreadState.cpp
@@ -76,6 +76,9 @@ uintptr_t ThreadState::s_mainThreadStackStart = 0;
uintptr_t ThreadState::s_mainThreadUnderestimatedStackSize = 0;
uint8_t ThreadState::s_mainThreadStateStorage[sizeof(ThreadState)];
SafePointBarrier* ThreadState::s_safePointBarrier = nullptr;
+#if ENABLE(ASSERT)
+int ThreadState::s_selfKeepAliveAllocationsOnMainThread = 0;
+#endif
RecursiveMutex& ThreadState::threadAttachMutex()
{
@@ -166,6 +169,9 @@ void ThreadState::attachMainThread()
MutexLocker locker(threadAttachMutex());
ThreadState* state = new(s_mainThreadStateStorage) ThreadState();
attachedThreads().add(state);
+#if ENABLE(ASSERT)
+ s_selfKeepAliveAllocationsOnMainThread = 0;
+#endif
}
void ThreadState::detachMainThread()
@@ -189,6 +195,8 @@ void ThreadState::detachMainThread()
attachedThreads().remove(state);
state->~ThreadState();
}
+ // Catch out any self-referential leaks created by the main thread.
+ ASSERT(s_selfKeepAliveAllocationsOnMainThread == 0);
shutdownHeapIfNecessary();
}
@@ -1537,4 +1545,23 @@ void ThreadState::reportMarkSweepStats(const char* statsName, const ClassAgeCoun
}
#endif
+#if ENABLE(ASSERT)
+void ThreadState::incrementSelfKeepAliveAllocations()
+{
+ if (!ThreadState::current()->isMainThread())
haraken 2015/08/06 10:30:59 Is there any reason we want to limit the check onl
sof 2015/08/06 10:40:29 The reason is that there's protection for thread s
haraken 2015/08/06 10:42:08 You could just add ThreadState::m_selfKeepAliveCou
sof 2015/08/06 10:59:01 You certainly could, but I wonder if we should try
haraken 2015/08/06 11:01:19 I don't have a strong opinion. I don't think it's
sof 2015/08/06 12:21:15 I've added a debugger-friendly entry point to Pers
+ return;
+
+ s_selfKeepAliveAllocationsOnMainThread++;
+}
+
+void ThreadState::decrementSelfKeepAliveAllocations()
+{
+ if (!ThreadState::current()->isMainThread())
+ return;
+
+ ASSERT(s_selfKeepAliveAllocationsOnMainThread > 0);
+ s_selfKeepAliveAllocationsOnMainThread--;
+}
+#endif
+
} // namespace blink
« no previous file with comments | « Source/platform/heap/ThreadState.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine