Title: [242415] releases/WebKitGTK/webkit-2.24/Source/bmalloc
Revision
242415
Author
carlo...@webkit.org
Date
2019-03-05 00:43:03 -0800 (Tue, 05 Mar 2019)

Log Message

Merge r241818 - Unreviewed, rolling out r241789.
https://bugs.webkit.org/show_bug.cgi?id=194856

GuardMalloc crashes (Requested by yusukesuzuki on #webkit).

Reverted changeset:

"[bmalloc] bmalloc::Cache should not be instantiated if we are
using system malloc"
https://bugs.webkit.org/show_bug.cgi?id=194811
https://trac.webkit.org/changeset/241789

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.24/Source/bmalloc/ChangeLog (242414 => 242415)


--- releases/WebKitGTK/webkit-2.24/Source/bmalloc/ChangeLog	2019-03-05 08:42:59 UTC (rev 242414)
+++ releases/WebKitGTK/webkit-2.24/Source/bmalloc/ChangeLog	2019-03-05 08:43:03 UTC (rev 242415)
@@ -1,3 +1,17 @@
+2019-02-20  Commit Queue  <commit-qu...@webkit.org>
+
+        Unreviewed, rolling out r241789.
+        https://bugs.webkit.org/show_bug.cgi?id=194856
+
+        GuardMalloc crashes (Requested by yusukesuzuki on #webkit).
+
+        Reverted changeset:
+
+        "[bmalloc] bmalloc::Cache should not be instantiated if we are
+        using system malloc"
+        https://bugs.webkit.org/show_bug.cgi?id=194811
+        https://trac.webkit.org/changeset/241789
+
 2019-02-19  Yusuke Suzuki  <ysuz...@apple.com>
 
         [bmalloc] bmalloc::Cache should not be instantiated if we are using system malloc

Modified: releases/WebKitGTK/webkit-2.24/Source/bmalloc/bmalloc/Allocator.cpp (242414 => 242415)


--- releases/WebKitGTK/webkit-2.24/Source/bmalloc/bmalloc/Allocator.cpp	2019-03-05 08:42:59 UTC (rev 242414)
+++ releases/WebKitGTK/webkit-2.24/Source/bmalloc/bmalloc/Allocator.cpp	2019-03-05 08:43:03 UTC (rev 242415)
@@ -27,7 +27,7 @@
 #include "BAssert.h"
 #include "Chunk.h"
 #include "Deallocator.h"
-#include "Environment.h"
+#include "DebugHeap.h"
 #include "Heap.h"
 #include "PerProcess.h"
 #include "Sizes.h"
@@ -38,9 +38,9 @@
 
 Allocator::Allocator(Heap& heap, Deallocator& deallocator)
     : m_heap(heap)
+    , m_debugHeap(heap.debugHeap())
     , m_deallocator(deallocator)
 {
-    BASSERT(!PerProcess<Environment>::get()->isDebugHeapEnabled());
     for (size_t sizeClass = 0; sizeClass < sizeClassCount; ++sizeClass)
         m_bumpAllocators[sizeClass].init(objectSize(sizeClass));
 }
@@ -52,6 +52,9 @@
 
 void* Allocator::tryAllocate(size_t size)
 {
+    if (m_debugHeap)
+        return m_debugHeap->malloc(size);
+
     if (size <= smallMax)
         return allocate(size);
 
@@ -75,6 +78,9 @@
 {
     BASSERT(isPowerOfTwo(alignment));
 
+    if (m_debugHeap)
+        return m_debugHeap->memalign(alignment, size, crashOnFailure);
+
     if (!size)
         size = alignment;
 
@@ -101,6 +107,9 @@
 
 void* Allocator::reallocateImpl(void* object, size_t newSize, bool crashOnFailure)
 {
+    if (m_debugHeap)
+        return m_debugHeap->realloc(object, newSize, crashOnFailure);
+
     size_t oldSize = 0;
     switch (objectType(m_heap.kind(), object)) {
     case ObjectType::Small: {
@@ -191,6 +200,9 @@
 
 void* Allocator::allocateSlowCase(size_t size)
 {
+    if (m_debugHeap)
+        return m_debugHeap->malloc(size);
+
     if (size <= maskSizeClassMax) {
         size_t sizeClass = bmalloc::maskSizeClass(size);
         BumpAllocator& allocator = m_bumpAllocators[sizeClass];

Modified: releases/WebKitGTK/webkit-2.24/Source/bmalloc/bmalloc/Allocator.h (242414 => 242415)


--- releases/WebKitGTK/webkit-2.24/Source/bmalloc/bmalloc/Allocator.h	2019-03-05 08:42:59 UTC (rev 242414)
+++ releases/WebKitGTK/webkit-2.24/Source/bmalloc/bmalloc/Allocator.h	2019-03-05 08:43:03 UTC (rev 242415)
@@ -33,6 +33,7 @@
 namespace bmalloc {
 
 class Deallocator;
+class DebugHeap;
 class Heap;
 
 // Per-cache object allocator.
@@ -68,6 +69,7 @@
     std::array<BumpRangeCache, sizeClassCount> m_bumpRangeCaches;
 
     Heap& m_heap;
+    DebugHeap* m_debugHeap;
     Deallocator& m_deallocator;
 };
 

Modified: releases/WebKitGTK/webkit-2.24/Source/bmalloc/bmalloc/Cache.cpp (242414 => 242415)


--- releases/WebKitGTK/webkit-2.24/Source/bmalloc/bmalloc/Cache.cpp	2019-03-05 08:42:59 UTC (rev 242414)
+++ releases/WebKitGTK/webkit-2.24/Source/bmalloc/bmalloc/Cache.cpp	2019-03-05 08:43:03 UTC (rev 242415)
@@ -25,15 +25,11 @@
 
 #include "BInline.h"
 #include "Cache.h"
-#include "DebugHeap.h"
-#include "Environment.h"
 #include "Heap.h"
 #include "PerProcess.h"
 
 namespace bmalloc {
 
-static DebugHeap* debugHeapCache { nullptr };
-
 void Cache::scavenge(HeapKind heapKind)
 {
     PerHeapKind<Cache>* caches = PerThread<PerHeapKind<Cache>>::getFastCase();
@@ -46,82 +42,34 @@
     caches->at(heapKind).deallocator().scavenge();
 }
 
-static BINLINE DebugHeap* debugHeap()
-{
-    if (debugHeapCache)
-        return debugHeapCache;
-    if (PerProcess<Environment>::get()->isDebugHeapEnabled()) {
-        debugHeapCache = PerProcess<DebugHeap>::get();
-        return debugHeapCache;
-    }
-    return nullptr;
-}
-
 Cache::Cache(HeapKind heapKind)
     : m_deallocator(PerProcess<PerHeapKind<Heap>>::get()->at(heapKind))
     , m_allocator(PerProcess<PerHeapKind<Heap>>::get()->at(heapKind), m_deallocator)
 {
-    BASSERT(!PerProcess<Environment>::get()->isDebugHeapEnabled());
 }
 
 BNO_INLINE void* Cache::tryAllocateSlowCaseNullCache(HeapKind heapKind, size_t size)
 {
-    // FIXME: DebugHeap does not have tryAllocate feature.
-    // https://bugs.webkit.org/show_bug.cgi?id=194837
-    if (auto* heap = debugHeap())
-        return heap->malloc(size);
     return PerThread<PerHeapKind<Cache>>::getSlowCase()->at(mapToActiveHeapKind(heapKind)).allocator().tryAllocate(size);
 }
 
 BNO_INLINE void* Cache::allocateSlowCaseNullCache(HeapKind heapKind, size_t size)
 {
-    if (auto* heap = debugHeap())
-        return heap->malloc(size);
     return PerThread<PerHeapKind<Cache>>::getSlowCase()->at(mapToActiveHeapKind(heapKind)).allocator().allocate(size);
 }
 
-BNO_INLINE void* Cache::tryAllocateSlowCaseNullCache(HeapKind heapKind, size_t alignment, size_t size)
-{
-    if (auto* heap = debugHeap()) {
-        constexpr bool crashOnFailure = false;
-        return heap->memalign(alignment, size, crashOnFailure);
-    }
-    return PerThread<PerHeapKind<Cache>>::getSlowCase()->at(mapToActiveHeapKind(heapKind)).allocator().tryAllocate(alignment, size);
-}
-
 BNO_INLINE void* Cache::allocateSlowCaseNullCache(HeapKind heapKind, size_t alignment, size_t size)
 {
-    if (auto* heap = debugHeap()) {
-        constexpr bool crashOnFailure = true;
-        return heap->memalign(alignment, size, crashOnFailure);
-    }
     return PerThread<PerHeapKind<Cache>>::getSlowCase()->at(mapToActiveHeapKind(heapKind)).allocator().allocate(alignment, size);
 }
 
 BNO_INLINE void Cache::deallocateSlowCaseNullCache(HeapKind heapKind, void* object)
 {
-    if (auto* heap = debugHeap()) {
-        heap->free(object);
-        return;
-    }
     PerThread<PerHeapKind<Cache>>::getSlowCase()->at(mapToActiveHeapKind(heapKind)).deallocator().deallocate(object);
 }
 
-BNO_INLINE void* Cache::tryReallocateSlowCaseNullCache(HeapKind heapKind, void* object, size_t newSize)
-{
-    if (auto* heap = debugHeap()) {
-        constexpr bool crashOnFailure = false;
-        return heap->realloc(object, newSize, crashOnFailure);
-    }
-    return PerThread<PerHeapKind<Cache>>::getSlowCase()->at(mapToActiveHeapKind(heapKind)).allocator().tryReallocate(object, newSize);
-}
-
 BNO_INLINE void* Cache::reallocateSlowCaseNullCache(HeapKind heapKind, void* object, size_t newSize)
 {
-    if (auto* heap = debugHeap()) {
-        constexpr bool crashOnFailure = true;
-        return heap->realloc(object, newSize, crashOnFailure);
-    }
     return PerThread<PerHeapKind<Cache>>::getSlowCase()->at(mapToActiveHeapKind(heapKind)).allocator().reallocate(object, newSize);
 }
 

Modified: releases/WebKitGTK/webkit-2.24/Source/bmalloc/bmalloc/Cache.h (242414 => 242415)


--- releases/WebKitGTK/webkit-2.24/Source/bmalloc/bmalloc/Cache.h	2019-03-05 08:42:59 UTC (rev 242414)
+++ releases/WebKitGTK/webkit-2.24/Source/bmalloc/bmalloc/Cache.h	2019-03-05 08:43:03 UTC (rev 242415)
@@ -56,10 +56,8 @@
 private:
     BEXPORT static void* tryAllocateSlowCaseNullCache(HeapKind, size_t);
     BEXPORT static void* allocateSlowCaseNullCache(HeapKind, size_t);
-    BEXPORT static void* tryAllocateSlowCaseNullCache(HeapKind, size_t alignment, size_t);
     BEXPORT static void* allocateSlowCaseNullCache(HeapKind, size_t alignment, size_t);
     BEXPORT static void deallocateSlowCaseNullCache(HeapKind, void*);
-    BEXPORT static void* tryReallocateSlowCaseNullCache(HeapKind, void*, size_t);
     BEXPORT static void* reallocateSlowCaseNullCache(HeapKind, void*, size_t);
 
     Deallocator m_deallocator;
@@ -86,7 +84,7 @@
 {
     PerHeapKind<Cache>* caches = PerThread<PerHeapKind<Cache>>::getFastCase();
     if (!caches)
-        return tryAllocateSlowCaseNullCache(heapKind, alignment, size);
+        return allocateSlowCaseNullCache(heapKind, alignment, size);
     return caches->at(mapToActiveHeapKindAfterEnsuringGigacage(heapKind)).allocator().tryAllocate(alignment, size);
 }
 
@@ -110,7 +108,7 @@
 {
     PerHeapKind<Cache>* caches = PerThread<PerHeapKind<Cache>>::getFastCase();
     if (!caches)
-        return tryReallocateSlowCaseNullCache(heapKind, object, newSize);
+        return reallocateSlowCaseNullCache(heapKind, object, newSize);
     return caches->at(mapToActiveHeapKindAfterEnsuringGigacage(heapKind)).allocator().tryReallocate(object, newSize);
 }
 

Modified: releases/WebKitGTK/webkit-2.24/Source/bmalloc/bmalloc/Deallocator.cpp (242414 => 242415)


--- releases/WebKitGTK/webkit-2.24/Source/bmalloc/bmalloc/Deallocator.cpp	2019-03-05 08:42:59 UTC (rev 242414)
+++ releases/WebKitGTK/webkit-2.24/Source/bmalloc/bmalloc/Deallocator.cpp	2019-03-05 08:43:03 UTC (rev 242415)
@@ -27,7 +27,7 @@
 #include "BInline.h"
 #include "Chunk.h"
 #include "Deallocator.h"
-#include "Environment.h"
+#include "DebugHeap.h"
 #include "Heap.h"
 #include "Object.h"
 #include "PerProcess.h"
@@ -39,8 +39,13 @@
 
 Deallocator::Deallocator(Heap& heap)
     : m_heap(heap)
+    , m_debugHeap(heap.debugHeap())
 {
-    BASSERT(!PerProcess<Environment>::get()->isDebugHeapEnabled());
+    if (m_debugHeap) {
+        // Fill the object log in order to disable the fast path.
+        while (m_objectLog.size() != m_objectLog.capacity())
+            m_objectLog.push(nullptr);
+    }
 }
 
 Deallocator::~Deallocator()
@@ -50,6 +55,9 @@
     
 void Deallocator::scavenge()
 {
+    if (m_debugHeap)
+        return;
+
     std::unique_lock<Mutex> lock(Heap::mutex());
 
     processObjectLog(lock);
@@ -65,6 +73,9 @@
 
 void Deallocator::deallocateSlowCase(void* object)
 {
+    if (m_debugHeap)
+        return m_debugHeap->free(object);
+
     if (!object)
         return;
 

Modified: releases/WebKitGTK/webkit-2.24/Source/bmalloc/bmalloc/Deallocator.h (242414 => 242415)


--- releases/WebKitGTK/webkit-2.24/Source/bmalloc/bmalloc/Deallocator.h	2019-03-05 08:42:59 UTC (rev 242414)
+++ releases/WebKitGTK/webkit-2.24/Source/bmalloc/bmalloc/Deallocator.h	2019-03-05 08:43:03 UTC (rev 242415)
@@ -33,6 +33,7 @@
 
 namespace bmalloc {
 
+class DebugHeap;
 class Heap;
 class Mutex;
 
@@ -57,6 +58,7 @@
     Heap& m_heap;
     FixedVector<void*, deallocatorLogCapacity> m_objectLog;
     LineCache m_lineCache; // The Heap removes items from this cache.
+    DebugHeap* m_debugHeap;
 };
 
 inline bool Deallocator::deallocateFastCase(void* object)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to