Loading...
--- libmalloc/libmalloc-283.100.5/src/malloc_common.c
+++ libmalloc/libmalloc-474.0.13/src/malloc_common.c
@@ -110,4 +110,40 @@
 	return NULL;
 }
 
+unsigned
+malloc_zone_batch_malloc_fallback(malloc_zone_t *zone, size_t size,
+		void **results, unsigned num_requested)
+{
+	unsigned allocated;
+	for (allocated = 0; allocated < num_requested; allocated++) {
+		void *ptr = zone->malloc(zone, size);
+		if (!ptr) {
+			break;
+		}
 
+		results[allocated] = ptr;
+	}
+
+	return allocated;
+}
+
+void
+malloc_zone_batch_free_fallback(malloc_zone_t *zone, void **to_be_freed,
+		unsigned count)
+{
+	for (unsigned i = 1; i <= count; i++) {
+		// Note: we iterate backward because nano and magazine malloc both do,
+		// although that seems likely to just be a vestigial codegen
+		// optimization for ancient non-optimizing compilers
+		void *ptr = to_be_freed[count - i];
+		if (ptr) {
+			zone->free(zone, ptr);
+		}
+	}
+}
+
+size_t
+malloc_zone_pressure_relief_fallback(malloc_zone_t *zone, size_t goal)
+{
+	return 0;
+}