[bmalloc] DebugHeap::malloc does not have "try" version.
authorysuzuki@apple.com <ysuzuki@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 20 Feb 2019 22:22:07 +0000 (22:22 +0000)
committerysuzuki@apple.com <ysuzuki@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 20 Feb 2019 22:22:07 +0000 (22:22 +0000)
https://bugs.webkit.org/show_bug.cgi?id=194837

Reviewed by Mark Lam.

Since DebugHeap::malloc does not have "try" version, our tryAllocate implementation does not work well with DebugHeap.
This patch adds crashOnFailure flag to DebugHeap::malloc.

* bmalloc/Cache.cpp:
(bmalloc::Cache::tryAllocateSlowCaseNullCache):
(bmalloc::Cache::allocateSlowCaseNullCache):
* bmalloc/DebugHeap.cpp:
(bmalloc::DebugHeap::malloc):
* bmalloc/DebugHeap.h:
* bmalloc/IsoTLS.cpp:
(bmalloc::IsoTLS::debugMalloc):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241837 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/bmalloc/ChangeLog
Source/bmalloc/bmalloc/Cache.cpp
Source/bmalloc/bmalloc/DebugHeap.cpp
Source/bmalloc/bmalloc/DebugHeap.h
Source/bmalloc/bmalloc/IsoTLS.cpp

index 98efb21..36de490 100644 (file)
@@ -1,5 +1,24 @@
 2019-02-20  Yusuke Suzuki  <ysuzuki@apple.com>
 
+        [bmalloc] DebugHeap::malloc does not have "try" version.
+        https://bugs.webkit.org/show_bug.cgi?id=194837
+
+        Reviewed by Mark Lam.
+
+        Since DebugHeap::malloc does not have "try" version, our tryAllocate implementation does not work well with DebugHeap.
+        This patch adds crashOnFailure flag to DebugHeap::malloc.
+
+        * bmalloc/Cache.cpp:
+        (bmalloc::Cache::tryAllocateSlowCaseNullCache):
+        (bmalloc::Cache::allocateSlowCaseNullCache):
+        * bmalloc/DebugHeap.cpp:
+        (bmalloc::DebugHeap::malloc):
+        * bmalloc/DebugHeap.h:
+        * bmalloc/IsoTLS.cpp:
+        (bmalloc::IsoTLS::debugMalloc):
+
+2019-02-20  Yusuke Suzuki  <ysuzuki@apple.com>
+
         [bmalloc] bmalloc::Cache should not be instantiated if we are using system malloc
         https://bugs.webkit.org/show_bug.cgi?id=194811
 
index 29ad130..64292a1 100644 (file)
@@ -66,17 +66,19 @@ Cache::Cache(HeapKind heapKind)
 
 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);
+    if (auto* heap = debugHeap()) {
+        constexpr bool crashOnFailure = false;
+        return heap->malloc(size, crashOnFailure);
+    }
     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);
+    if (auto* heap = debugHeap()) {
+        constexpr bool crashOnFailure = true;
+        return heap->malloc(size, crashOnFailure);
+    }
     return PerThread<PerHeapKind<Cache>>::getSlowCase()->at(mapToActiveHeapKind(heapKind)).allocator().allocate(size);
 }
 
index f21f5a5..1ff1780 100644 (file)
@@ -43,10 +43,10 @@ DebugHeap::DebugHeap(std::lock_guard<Mutex>&)
     malloc_set_zone_name(m_zone, "WebKit Using System Malloc");
 }
 
-void* DebugHeap::malloc(size_t size)
+void* DebugHeap::malloc(size_t size, bool crashOnFailure)
 {
     void* result = malloc_zone_malloc(m_zone, size);
-    if (!result)
+    if (!result && crashOnFailure)
         BCRASH();
     return result;
 }
@@ -79,10 +79,10 @@ DebugHeap::DebugHeap(std::lock_guard<Mutex>&)
 {
 }
 
-void* DebugHeap::malloc(size_t size)
+void* DebugHeap::malloc(size_t size, bool crashOnFailure)
 {
     void* result = ::malloc(size);
-    if (!result)
+    if (!result && crashOnFailure)
         BCRASH();
     return result;
 }
index 219f837..518a645 100644 (file)
@@ -39,7 +39,7 @@ class DebugHeap {
 public:
     DebugHeap(std::lock_guard<Mutex>&);
     
-    void* malloc(size_t);
+    void* malloc(size_t, bool crashOnFailure);
     void* memalign(size_t alignment, size_t, bool crashOnFailure);
     void* realloc(void*, size_t, bool crashOnFailure);
     void free(void*);
index c96f222..520565f 100644 (file)
@@ -182,8 +182,10 @@ bool IsoTLS::isUsingDebugHeap()
 auto IsoTLS::debugMalloc(size_t size) -> DebugMallocResult
 {
     DebugMallocResult result;
-    if ((result.usingDebugHeap = isUsingDebugHeap()))
-        result.ptr = PerProcess<DebugHeap>::get()->malloc(size);
+    if ((result.usingDebugHeap = isUsingDebugHeap())) {
+        constexpr bool crashOnFailure = true;
+        result.ptr = PerProcess<DebugHeap>::get()->malloc(size, crashOnFailure);
+    }
     return result;
 }