Loading...
--- libmalloc/libmalloc-166.220.1/src/nanov2_malloc.c
+++ libmalloc/libmalloc-166.251.2/src/nanov2_malloc.c
@@ -567,16 +567,30 @@
 static MALLOC_ALWAYS_INLINE MALLOC_INLINE int
 nanov2_get_allocation_block_index(void)
 {
+#if CONFIG_NANO_USES_HYPER_SHIFT
 	if (os_likely(nano_common_max_magazines_is_ncpu)) {
 		// Default case is max magazines == physical number of CPUs, which
 		// must be > _os_cpu_number() >> hyper_shift, so the modulo
 		// operation is not required.
 		return _os_cpu_number() >> hyper_shift;
 	}
+#else // CONFIG_NANO_USES_HYPER_SHIFT
+	if (os_likely(nano_common_max_magazines_is_ncpu)) {
+		// Default case is max magazines == logical number of CPUs, which
+		// must be > _os_cpu_number() so the modulo operation is not required.
+		return _os_cpu_number();
+	}
+#endif // CONFIG_NANO_USES_HYPER_SHIFT
+
+	unsigned int shift = 0;
+#if CONFIG_NANO_USES_HYPER_SHIFT
+	shift = hyper_shift;
+#endif // CONFIG_NANO_USES_HYPER_SHIFT
+
 	if (os_likely(_os_cpu_number_override == -1)) {
-		return (_os_cpu_number() >> hyper_shift) % nano_common_max_magazines;
-	}
-	return (_os_cpu_number_override >> hyper_shift) % nano_common_max_magazines;
+		return (_os_cpu_number() >> shift) % nano_common_max_magazines;
+	}
+	return (_os_cpu_number_override >> shift) % nano_common_max_magazines;
 }
 #endif // OS_VARIANT_RESOLVED
 
@@ -688,7 +702,7 @@
 	boolean_t max_found = FALSE;
 	boolean_t lim_found = FALSE;
 	const char *value = ptr;
-	
+
 	if (ptr) {
 		if (!strcmp(ptr, first_fit_key)) {
 			block_scan_policy = NANO_SCAN_FIRST_FIT;
@@ -743,7 +757,7 @@
 			}
 		}
 	}
-	
+
 	if (!failed) {
 		nanov2_policy_config.block_scan_policy = block_scan_policy;
 		nanov2_policy_config.block_scan_min_capacity = scan_min_capacity;
@@ -1050,7 +1064,7 @@
 			return ptr;
 		}
 	}
-	
+
 	// If we reach this point, we allocated new memory. Copy the existing
 	// content to the new location and release the old allocation.
 	MALLOC_ASSERT(new_ptr);
@@ -1187,7 +1201,7 @@
 		}
 		region = nanov2_next_region_for_region(nanozone, region);
 	}
-	
+
 done:
 	MAGMALLOC_PRESSURERELIEFEND((void *)nanozone, name, (int)goal, (int)total);
 	MALLOC_TRACE(TRACE_nano_memory_pressure | DBG_FUNC_END,
@@ -2033,9 +2047,6 @@
 			__builtin_unreachable();
 		}
 	}
-
-	// Reset the canary value so that the slot no longer looks free.
-	os_atomic_store(&slotp->double_free_guard, 0, relaxed);
 	
 #if DEBUG_MALLOC
 	nanozone->statistics.size_class_statistics[size_class].total_allocations++;
@@ -2541,10 +2552,10 @@
 nanov2_create_zone(malloc_zone_t *helper_zone, unsigned debug_flags)
 {
 	// Note: It is important that nanov2_create_zone resets _malloc_engaged_nano
- 	// if it is unable to enable the nanozone (and chooses not to abort). As
+	// if it is unable to enable the nanozone (and chooses not to abort). As
 	// several functions rely on _malloc_engaged_nano to determine if they
 	// should manipulate the nanozone, and these should not run if we failed
- 	// to create the zone.
+	// to create the zone.
 	MALLOC_ASSERT(_malloc_engaged_nano == NANO_V2);
 
 	// Get memory for the zone and disable Nano if we fail.
@@ -2610,7 +2621,7 @@
 	// align it to the block field of a Nano address.
 	nanozone->aslr_cookie = malloc_entropy[1] >> (64 - NANOV2_BLOCK_BITS);
 	nanozone->aslr_cookie_aligned = nanozone->aslr_cookie << NANOV2_OFFSET_BITS;
-	
+
 	_malloc_lock_init(&nanozone->blocks_lock);
 	_malloc_lock_init(&nanozone->regions_lock);
 	_malloc_lock_init(&nanozone->madvise_lock);