bmalloc should implement malloc introspection (to stop false-positive leaks when...
authorggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 3 Mar 2015 21:58:02 +0000 (21:58 +0000)
committerggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 3 Mar 2015 21:58:02 +0000 (21:58 +0000)
https://bugs.webkit.org/show_bug.cgi?id=141802

Reviewed by Andreas Kling.

Rolling back in but disabled on iOS until I can debug why the iOS PLT crashes.

* bmalloc/VMHeap.cpp:
(bmalloc::VMHeap::grow):
* bmalloc/VMHeap.h:
* bmalloc/Zone.cpp:
(bmalloc::Zone::size):
(bmalloc::Zone::Zone):
* bmalloc/Zone.h:

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

Source/bmalloc/ChangeLog
Source/bmalloc/bmalloc/VMHeap.cpp
Source/bmalloc/bmalloc/VMHeap.h
Source/bmalloc/bmalloc/Zone.cpp
Source/bmalloc/bmalloc/Zone.h

index db35f27..b071244 100644 (file)
@@ -1,5 +1,22 @@
 2015-03-03  Geoffrey Garen  <ggaren@apple.com>
 
+        bmalloc should implement malloc introspection (to stop false-positive leaks when MallocStackLogging is off)
+        https://bugs.webkit.org/show_bug.cgi?id=141802
+
+        Reviewed by Andreas Kling.
+
+        Rolling back in but disabled on iOS until I can debug why the iOS PLT crashes.
+
+        * bmalloc/VMHeap.cpp:
+        (bmalloc::VMHeap::grow):
+        * bmalloc/VMHeap.h:
+        * bmalloc/Zone.cpp:
+        (bmalloc::Zone::size):
+        (bmalloc::Zone::Zone):
+        * bmalloc/Zone.h:
+
+2015-03-03  Geoffrey Garen  <ggaren@apple.com>
+
         bmalloc: Miscellaneous cleanup
         https://bugs.webkit.org/show_bug.cgi?id=142231
 
index 26ffb1f..2aad2b1 100644 (file)
@@ -40,7 +40,7 @@ VMHeap::VMHeap()
 void VMHeap::grow()
 {
     SuperChunk* superChunk = SuperChunk::create();
-#if BPLATFORM(DARWIN)
+#if BOS(DARWIN) && !BPLATFORM(IOS)
     m_zone.addSuperChunk(superChunk);
 #endif
 
index d581ab6..9ddceab 100644 (file)
@@ -35,7 +35,7 @@
 #include "SegregatedFreeList.h"
 #include "SmallChunk.h"
 #include "Vector.h"
-#if BPLATFORM(DARWIN)
+#if BOS(DARWIN) && !BPLATFORM(IOS)
 #include "Zone.h"
 #endif
 
@@ -66,7 +66,7 @@ private:
     Vector<SmallPage*> m_smallPages;
     Vector<MediumPage*> m_mediumPages;
     SegregatedFreeList m_largeObjects;
-#if BPLATFORM(DARWIN)
+#if BOS(DARWIN) && !BPLATFORM(IOS)
     Zone m_zone;
 #endif
 };
index f2174ce..9cfa715 100644 (file)
@@ -42,6 +42,13 @@ template<typename T> static void remoteRead(task_t task, memory_reader_t reader,
     memcpy(&result, tmp, sizeof(T));
 }
 
+// Support malloc_zone_from_ptr, which calls size() on each registered zone.
+size_t Zone::size(malloc_zone_t*, const void*)
+{
+    // Our zone is not public API, so no pointer can belong to us.
+    return 0;
+}
+
 // This function runs inside the leaks process.
 kern_return_t Zone::enumerator(task_t task, void* context, unsigned type_mask, vm_address_t zone_address, memory_reader_t reader, vm_range_recorder_t recorder)
 {
@@ -63,9 +70,10 @@ kern_return_t Zone::enumerator(task_t task, void* context, unsigned type_mask, v
 
 Zone::Zone()
 {
-    version = 4;
-    zone_name = "WebKit Malloc";
-    introspect = &bmalloc::introspect;
+    malloc_zone_t::size = size;
+    malloc_zone_t::zone_name = "WebKit Malloc";
+    malloc_zone_t::introspect = &bmalloc::introspect;
+    malloc_zone_t::version = 4;
     malloc_zone_register(this);
 }
 
index b9fc228..4fe496e 100644 (file)
@@ -38,6 +38,7 @@ public:
     // Enough capacity to track a 64GB heap, so probably enough for anything.
     static const size_t capacity = 2048;
 
+    static size_t size(malloc_zone_t*, const void*);
     static kern_return_t enumerator(task_t, void* context, unsigned type_mask, vm_address_t, memory_reader_t, vm_range_recorder_t);
 
     Zone();