Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(862)

Unified Diff: third_party/WebKit/Source/platform/heap/SafePoint.cpp

Issue 2039793002: Add documentation of SafePointBarrier internal state. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/platform/heap/SafePoint.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/platform/heap/SafePoint.cpp
diff --git a/third_party/WebKit/Source/platform/heap/SafePoint.cpp b/third_party/WebKit/Source/platform/heap/SafePoint.cpp
index 7123964e973647344fd76292b8704705ecd5c7ee..6625c7a9b77ad3a2b0fd65d20bf71f9b975c8455 100644
--- a/third_party/WebKit/Source/platform/heap/SafePoint.cpp
+++ b/third_party/WebKit/Source/platform/heap/SafePoint.cpp
@@ -20,8 +20,8 @@ static double lockingTimeout()
}
SafePointBarrier::SafePointBarrier()
- : m_canResume(1)
- , m_unparkedThreadCount(0)
+ : m_unparkedThreadCount(0)
+ , m_parkingRequested(0)
{
}
@@ -40,7 +40,7 @@ bool SafePointBarrier::parkOthers()
MutexLocker locker(m_mutex);
atomicAdd(&m_unparkedThreadCount, threads.size());
- releaseStore(&m_canResume, 0);
+ releaseStore(&m_parkingRequested, 1);
for (ThreadState* state : threads) {
if (state == current)
@@ -68,7 +68,7 @@ void SafePointBarrier::resumeOthers(bool barrierLocked)
ThreadState* current = ThreadState::current();
const ThreadStateSet& threads = current->heap().threads();
atomicSubtract(&m_unparkedThreadCount, threads.size());
- releaseStore(&m_canResume, 1);
+ releaseStore(&m_parkingRequested, 0);
if (UNLIKELY(barrierLocked)) {
m_resume.broadcast();
@@ -86,7 +86,7 @@ void SafePointBarrier::resumeOthers(bool barrierLocked)
void SafePointBarrier::checkAndPark(ThreadState* state, SafePointAwareMutexLocker* locker)
{
ASSERT(!state->sweepForbidden());
- if (!acquireLoad(&m_canResume)) {
+ if (acquireLoad(&m_parkingRequested)) {
// If we are leaving the safepoint from a SafePointAwareMutexLocker
// call out to release the lock before going to sleep. This enables the
// lock to be acquired in the sweep phase, e.g. during weak processing
@@ -116,7 +116,7 @@ void SafePointBarrier::doPark(ThreadState* state, intptr_t* stackEnd)
MutexLocker locker(m_mutex);
if (!atomicDecrement(&m_unparkedThreadCount))
m_parked.signal();
- while (!acquireLoad(&m_canResume))
+ while (acquireLoad(&m_parkingRequested))
m_resume.wait(m_mutex);
atomicIncrement(&m_unparkedThreadCount);
}
@@ -125,14 +125,6 @@ void SafePointBarrier::doEnterSafePoint(ThreadState* state, intptr_t* stackEnd)
{
state->recordStackEnd(stackEnd);
state->copyStackUntilSafePointScope();
- // m_unparkedThreadCount tracks amount of unparked threads. It is
- // positive if and only if we have requested other threads to park
- // at safe-points in preparation for GC. The last thread to park
- // itself will make the counter hit zero and should notify GC thread
- // that it is safe to proceed.
- // If no other thread is waiting for other threads to park then
- // this counter can be negative: if N threads are at safe-points
- // the counter will be -N.
if (!atomicDecrement(&m_unparkedThreadCount)) {
MutexLocker locker(m_mutex);
m_parked.signal(); // Safe point reached.
« no previous file with comments | « third_party/WebKit/Source/platform/heap/SafePoint.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698