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

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

Issue 1502023002: Revert of Switch wtf/SpinLock to std::atomic (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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
« no previous file with comments | « third_party/WebKit/Source/wtf/PartitionAlloc.h ('k') | third_party/WebKit/Source/wtf/Partitions.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 a71dd0053b92d34dbe75649ed3be8605548749e8..8e6cdd9f4be257ac5b09fe91a7a32e5fe1482061 100644
--- a/third_party/WebKit/Source/wtf/PartitionAlloc.cpp
+++ b/third_party/WebKit/Source/wtf/PartitionAlloc.cpp
@@ -55,7 +55,7 @@
namespace WTF {
-SpinLock PartitionRootBase::gInitializedLock;
+int PartitionRootBase::gInitializedLock = 0;
bool PartitionRootBase::gInitialized = false;
PartitionPage PartitionRootBase::gSeedPage;
PartitionBucket PartitionRootBase::gPagedBucket;
@@ -104,15 +104,15 @@
static void partitionAllocBaseInit(PartitionRootBase* root)
{
ASSERT(!root->initialized);
- {
- 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;
- }
- }
+
+ 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;
+ }
+ spinLockUnlock(&PartitionRootBase::gInitializedLock);
root->initialized = true;
root->totalSizeOfCommittedPages = 0;
@@ -166,7 +166,7 @@
void partitionAllocGenericInit(PartitionRootGeneric* root)
{
- SpinLock::Guard guard(root->lock);
+ spinLockLock(&root->lock);
partitionAllocBaseInit(root);
@@ -243,6 +243,8 @@
// 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)
@@ -291,7 +293,7 @@
bool partitionAllocGenericShutdown(PartitionRootGeneric* root)
{
- SpinLock::Guard guard(root->lock);
+ spinLockLock(&root->lock);
bool foundLeak = false;
size_t i;
for (i = 0; i < kGenericNumBuckets; ++i) {
@@ -299,6 +301,7 @@
foundLeak |= partitionAllocShutdownBucket(bucket);
}
foundLeak |= partitionAllocBaseShutdown(root);
+ spinLockUnlock(&root->lock);
return !foundLeak;
}
@@ -1238,7 +1241,7 @@
void partitionPurgeMemoryGeneric(PartitionRootGeneric* root, int flags)
{
- SpinLock::Guard guard(root->lock);
+ spinLockLock(&root->lock);
if (flags & PartitionPurgeDecommitEmptyPages)
partitionDecommitEmptyPages(root);
if (flags & PartitionPurgeDiscardUnusedSystemPages) {
@@ -1248,6 +1251,7 @@
partitionPurgeBucket(bucket);
}
}
+ spinLockUnlock(&root->lock);
}
static void partitionDumpPageStats(PartitionBucketMemoryStats* statsOut, const PartitionPage* page)
@@ -1325,28 +1329,28 @@
uint32_t directMapLengths[kMaxReportableDirectMaps];
size_t numDirectMappedAllocations = 0;
- {
- 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 (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;
- }
- }
+ spinLockLock(&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 (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
« no previous file with comments | « third_party/WebKit/Source/wtf/PartitionAlloc.h ('k') | third_party/WebKit/Source/wtf/Partitions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698