fix(Phase 11+): Cold Start lazy init for unified_cache_refill
Root cause: unified_cache_refill() accessed cache->slots before initialization when a size class was first used via the refill path (not pop path). Fix: Add lazy initialization check at start of unified_cache_refill() - Check if cache->slots is NULL before accessing - Call unified_cache_init() if needed - Return NULL if init fails (graceful degradation) Also includes: - ss_cold_start_box.inc.h: Box Pattern for default prewarm settings - hakmem_super_registry.c: Use static array in prewarm (avoid recursion) - Default prewarm enabled (1 SuperSlab/class, configurable via ENV) Test: 8B→16B→Mixed allocation pattern now works correctly 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -303,6 +303,15 @@ void* unified_cache_refill(int class_idx) {
|
||||
|
||||
TinyUnifiedCache* cache = &g_unified_cache[class_idx];
|
||||
|
||||
// ✅ Phase 11+: Ensure cache is initialized (lazy init for cold path)
|
||||
if (!cache->slots) {
|
||||
unified_cache_init();
|
||||
// Re-check after init (may fail due to alloc failure)
|
||||
if (!cache->slots) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// Step 2: Calculate available room in unified cache
|
||||
int room = (int)cache->capacity - 1; // Leave 1 slot for full detection
|
||||
if (cache->head > cache->tail) {
|
||||
|
||||
Reference in New Issue
Block a user