| Index: third_party/WebKit/Source/wtf/PartitionAlloc.h
|
| diff --git a/third_party/WebKit/Source/wtf/PartitionAlloc.h b/third_party/WebKit/Source/wtf/PartitionAlloc.h
|
| index 1dba60909682ef2c1f909a73711c935398236f57..2f2d82158f772d7b3c948ec822f8eed05d08a492 100644
|
| --- a/third_party/WebKit/Source/wtf/PartitionAlloc.h
|
| +++ b/third_party/WebKit/Source/wtf/PartitionAlloc.h
|
| @@ -309,7 +309,7 @@ struct WTF_EXPORT PartitionRootBase {
|
| int16_t globalEmptyPageRingIndex;
|
| uintptr_t invertedSelf;
|
|
|
| - static int gInitializedLock;
|
| + static SpinLock gInitializedLock;
|
| static bool gInitialized;
|
| // gSeedPage is used as a sentinel to indicate that there is no page
|
| // in the active page list. We can use nullptr, but in that case we need
|
| @@ -330,7 +330,7 @@ struct PartitionRoot : public PartitionRootBase {
|
|
|
| // Never instantiate a PartitionRootGeneric directly, instead use PartitionAllocatorGeneric.
|
| struct PartitionRootGeneric : public PartitionRootBase {
|
| - int lock;
|
| + SpinLock lock;
|
| // Some pre-computed constants.
|
| size_t orderIndexShifts[kBitsPerSizet + 1];
|
| size_t orderSubIndexMasks[kBitsPerSizet + 1];
|
| @@ -752,16 +752,18 @@ ALWAYS_INLINE void* partitionAllocGenericFlags(PartitionRootGeneric* root, int f
|
| size_t requestedSize = size;
|
| size = partitionCookieSizeAdjustAdd(size);
|
| PartitionBucket* bucket = partitionGenericSizeToBucket(root, size);
|
| - spinLockLock(&root->lock);
|
| - // TODO(bashi): Remove following RELEAE_ASSERT()s once we find the cause of
|
| - // http://crbug.com/514141
|
| + void* ret = nullptr;
|
| + {
|
| + SpinLock::Guard guard(root->lock);
|
| + // TODO(bashi): Remove following RELEAE_ASSERT()s once we find the cause of
|
| + // http://crbug.com/514141
|
| #if OS(ANDROID)
|
| - RELEASE_ASSERT(bucket >= &root->buckets[0] || bucket == &PartitionRootGeneric::gPagedBucket);
|
| - RELEASE_ASSERT(bucket <= &root->buckets[kGenericNumBuckets - 1] || bucket == &PartitionRootGeneric::gPagedBucket);
|
| - RELEASE_ASSERT(root->initialized);
|
| + RELEASE_ASSERT(bucket >= &root->buckets[0] || bucket == &PartitionRootGeneric::gPagedBucket);
|
| + RELEASE_ASSERT(bucket <= &root->buckets[kGenericNumBuckets - 1] || bucket == &PartitionRootGeneric::gPagedBucket);
|
| + RELEASE_ASSERT(root->initialized);
|
| #endif
|
| - void* ret = partitionBucketAlloc(root, flags, size, bucket);
|
| - spinLockUnlock(&root->lock);
|
| + ret = partitionBucketAlloc(root, flags, size, bucket);
|
| + }
|
| PartitionAllocHooks::allocationHookIfEnabled(ret, requestedSize, typeName);
|
| return ret;
|
| #endif
|
| @@ -786,9 +788,10 @@ ALWAYS_INLINE void partitionFreeGeneric(PartitionRootGeneric* root, void* ptr)
|
| ptr = partitionCookieFreePointerAdjust(ptr);
|
| ASSERT(partitionPointerIsValid(ptr));
|
| PartitionPage* page = partitionPointerToPage(ptr);
|
| - spinLockLock(&root->lock);
|
| - partitionFreeWithPage(ptr, page);
|
| - spinLockUnlock(&root->lock);
|
| + {
|
| + SpinLock::Guard guard(root->lock);
|
| + partitionFreeWithPage(ptr, page);
|
| + }
|
| #endif
|
| }
|
|
|
|
|