Loading...
src/magazine_malloc.c libmalloc-67.40.1 libmalloc-53.1.1
--- libmalloc/libmalloc-67.40.1/src/magazine_malloc.c
+++ libmalloc/libmalloc-53.1.1/src/magazine_malloc.c
@@ -1203,8 +1203,18 @@
 		szone_error(szone, 0, "Can't deallocate_pages region", addr, NULL);
 }
 
-/* As of <rdar://problem/19818071> we now use MADV_FREE_REUSABLE on both platforms. */
-#define MADVISE_STYLE MADV_FREE_REUSABLE
+/* On OS X we use MADV_FREE_REUSABLE, which signals the kernel to remove the given
+ * pages from the memory statistics for our process. However, on returning that memory
+ * to use we have to signal that it has been reused.
+ *
+ * On iOS MADV_FREE is used, which does no such tinkering and madvise_reuse_range is a
+ * no-op.
+ */
+#if TARGET_OS_EMBEDDED
+# define MADVISE_STYLE MADV_FREE
+#else
+# define MADVISE_STYLE MADV_FREE_REUSABLE
+#endif
 
 static int
 madvise_free_range(szone_t *szone, region_t r, uintptr_t pgLo, uintptr_t pgHi, uintptr_t *last)
@@ -1240,6 +1250,7 @@
 static int
 madvise_reuse_range(szone_t *szone, region_t r, uintptr_t pgLo, uintptr_t phHi)
 {
+#if !TARGET_OS_EMBEDDED
 	if (phHi > pgLo) {
 		size_t len = phHi - pgLo;
 
@@ -1252,6 +1263,7 @@
 			return 1;
 		}
 	}
+#endif
 	return 0;
 }
 
@@ -2817,12 +2829,6 @@
 																 REGION_TRAILER_FOR_TINY_REGION(TINY_REGION_FOR_PTR(ptr)),
 																 MAGAZINE_INDEX_FOR_TINY_REGION(TINY_REGION_FOR_PTR(ptr)));
 
-	if (DEPOT_MAGAZINE_INDEX == MAGAZINE_INDEX_FOR_TINY_REGION(TINY_REGION_FOR_PTR(ptr)))
-	{
-	    SZONE_MAGAZINE_PTR_UNLOCK(szone, tiny_mag_ptr);
-	    return 0;
-	}
-
 	/*
 	 * Look for a free block immediately afterwards.  If it's large enough, we can consume (part of)
 	 * it.
@@ -4621,12 +4627,6 @@
 	magazine_t	*small_mag_ptr = mag_lock_zine_for_region_trailer(szone, szone->small_magazines,
 																  REGION_TRAILER_FOR_SMALL_REGION(SMALL_REGION_FOR_PTR(ptr)),
 																  MAGAZINE_INDEX_FOR_SMALL_REGION(SMALL_REGION_FOR_PTR(ptr)));
-	if (DEPOT_MAGAZINE_INDEX == MAGAZINE_INDEX_FOR_SMALL_REGION(SMALL_REGION_FOR_PTR(ptr)))
-	{
-	    SZONE_MAGAZINE_PTR_UNLOCK(szone, small_mag_ptr);
-	    return 0;
-	}
-
 
 	/*
 	 * Look for a free block immediately afterwards.  If it's large enough, we can consume (part of)