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

Unified Diff: third_party/WebKit/Source/wtf/PartitionAlloc.cpp

Issue 1463683002: Switch wtf/SpinLock to std::atomic (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: asan iwyu Created 5 years 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
Index: third_party/WebKit/Source/wtf/PartitionAlloc.cpp
diff --git a/third_party/WebKit/Source/wtf/PartitionAlloc.cpp b/third_party/WebKit/Source/wtf/PartitionAlloc.cpp
index 8e6cdd9f4be257ac5b09fe91a7a32e5fe1482061..a71dd0053b92d34dbe75649ed3be8605548749e8 100644
--- a/third_party/WebKit/Source/wtf/PartitionAlloc.cpp
+++ b/third_party/WebKit/Source/wtf/PartitionAlloc.cpp
@@ -55,7 +55,7 @@ static_assert(WTF::kGenericMaxBucketed == 983040, "generic max bucketed");
namespace WTF {
-int PartitionRootBase::gInitializedLock = 0;
+SpinLock PartitionRootBase::gInitializedLock;
bool PartitionRootBase::gInitialized = false;
PartitionPage PartitionRootBase::gSeedPage;
PartitionBucket PartitionRootBase::gPagedBucket;
@@ -104,15 +104,15 @@ static uint16_t partitionBucketNumSystemPages(size_t size)
static void partitionAllocBaseInit(PartitionRootBase* root)
{
ASSERT(!root->initialized);
-
- spinLockLock(&PartitionRootBase::gInitializedLock);
- if (!PartitionRootBase::gInitialized) {
- PartitionRootBase::gInitialized = true;
- // We mark the seed page as free to make sure it is skipped by our
- // logic to find a new active page.
- PartitionRootBase::gPagedBucket.activePagesHead = &PartitionRootGeneric::gSeedPage;
+ {
+ SpinLock::Guard guard(PartitionRootBase::gInitializedLock);
+ if (!PartitionRootBase::gInitialized) {
+ PartitionRootBase::gInitialized = true;
+ // We mark the seed page as free to make sure it is skipped by our
+ // logic to find a new active page.
+ PartitionRootBase::gPagedBucket.activePagesHead = &PartitionRootGeneric::gSeedPage;
+ }
}
- spinLockUnlock(&PartitionRootBase::gInitializedLock);
root->initialized = true;
root->totalSizeOfCommittedPages = 0;
@@ -166,7 +166,7 @@ void partitionAllocInit(PartitionRoot* root, size_t numBuckets, size_t maxAlloca
void partitionAllocGenericInit(PartitionRootGeneric* root)
{
- spinLockLock(&root->lock);
+ SpinLock::Guard guard(root->lock);
partitionAllocBaseInit(root);
@@ -243,8 +243,6 @@ void partitionAllocGenericInit(PartitionRootGeneric* root)
// And there's one last bucket lookup that will be hit for e.g. malloc(-1),
// which tries to overflow to a non-existant order.
*bucketPtr = &PartitionRootGeneric::gPagedBucket;
-
- spinLockUnlock(&root->lock);
}
static bool partitionAllocShutdownBucket(PartitionBucket* bucket)
@@ -293,7 +291,7 @@ bool partitionAllocShutdown(PartitionRoot* root)
bool partitionAllocGenericShutdown(PartitionRootGeneric* root)
{
- spinLockLock(&root->lock);
+ SpinLock::Guard guard(root->lock);
bool foundLeak = false;
size_t i;
for (i = 0; i < kGenericNumBuckets; ++i) {
@@ -301,7 +299,6 @@ bool partitionAllocGenericShutdown(PartitionRootGeneric* root)
foundLeak |= partitionAllocShutdownBucket(bucket);
}
foundLeak |= partitionAllocBaseShutdown(root);
- spinLockUnlock(&root->lock);
return !foundLeak;
}
@@ -1241,7 +1238,7 @@ void partitionPurgeMemory(PartitionRoot* root, int flags)
void partitionPurgeMemoryGeneric(PartitionRootGeneric* root, int flags)
{
- spinLockLock(&root->lock);
+ SpinLock::Guard guard(root->lock);
if (flags & PartitionPurgeDecommitEmptyPages)
partitionDecommitEmptyPages(root);
if (flags & PartitionPurgeDiscardUnusedSystemPages) {
@@ -1251,7 +1248,6 @@ void partitionPurgeMemoryGeneric(PartitionRootGeneric* root, int flags)
partitionPurgeBucket(bucket);
}
}
- spinLockUnlock(&root->lock);
}
static void partitionDumpPageStats(PartitionBucketMemoryStats* statsOut, const PartitionPage* page)
@@ -1329,29 +1325,29 @@ void partitionDumpStatsGeneric(PartitionRootGeneric* partition, const char* part
uint32_t directMapLengths[kMaxReportableDirectMaps];
size_t numDirectMappedAllocations = 0;
- spinLockLock(&partition->lock);
+ {
+ SpinLock::Guard guard(partition->lock);
- for (size_t i = 0; i < kGenericNumBuckets; ++i) {
- const PartitionBucket* bucket = &partition->buckets[i];
- // Don't report the pseudo buckets that the generic allocator sets up in
- // order to preserve a fast size->bucket map (see
- // partitionAllocGenericInit for details).
- if (!bucket->activePagesHead)
- bucketStats[i].isValid = false;
- else
- partitionDumpBucketStats(&bucketStats[i], bucket);
- }
+ for (size_t i = 0; i < kGenericNumBuckets; ++i) {
+ const PartitionBucket* bucket = &partition->buckets[i];
+ // Don't report the pseudo buckets that the generic allocator sets up in
+ // order to preserve a fast size->bucket map (see
+ // partitionAllocGenericInit for details).
+ if (!bucket->activePagesHead)
+ bucketStats[i].isValid = false;
+ else
+ partitionDumpBucketStats(&bucketStats[i], bucket);
+ }
- for (PartitionDirectMapExtent* extent = partition->directMapList; extent; extent = extent->nextExtent) {
- ASSERT(!extent->nextExtent || extent->nextExtent->prevExtent == extent);
- directMapLengths[numDirectMappedAllocations] = extent->bucket->slotSize;
- ++numDirectMappedAllocations;
- if (numDirectMappedAllocations == kMaxReportableDirectMaps)
- break;
+ for (PartitionDirectMapExtent* extent = partition->directMapList; extent; extent = extent->nextExtent) {
+ ASSERT(!extent->nextExtent || extent->nextExtent->prevExtent == extent);
+ directMapLengths[numDirectMappedAllocations] = extent->bucket->slotSize;
+ ++numDirectMappedAllocations;
+ if (numDirectMappedAllocations == kMaxReportableDirectMaps)
+ break;
+ }
}
- spinLockUnlock(&partition->lock);
-
// partitionsDumpBucketStats is called after collecting stats because it
// can try to allocate using PartitionAllocGeneric and it can't obtain the
// lock.

Powered by Google App Engine
This is Rietveld 408576698