Guard madvise ENOMEM and stabilize pool/tiny front v3
This commit is contained in:
@ -4,6 +4,7 @@
|
||||
// Date: 2025-11-28
|
||||
|
||||
#include "hakmem_tiny_superslab_internal.h"
|
||||
#include "hakmem_env_cache.h"
|
||||
#include "box/ss_os_acquire_box.h"
|
||||
|
||||
// ============================================================================
|
||||
@ -116,9 +117,12 @@ void* ss_os_acquire(uint8_t size_class, size_t ss_size, uintptr_t ss_mask, int p
|
||||
// This is critical: we MUST touch the pages after munmap() to establish valid mappings
|
||||
// CRITICAL FIX (2025-12-05): Use MADV_POPULATE_WRITE for efficiency
|
||||
#ifdef MADV_POPULATE_WRITE
|
||||
int ret = madvise(ptr, ss_size, MADV_POPULATE_WRITE);
|
||||
ss_os_stats_record_madvise();
|
||||
int ret = ss_os_madvise_guarded(ptr, ss_size, MADV_POPULATE_WRITE, "ss_cache_populate");
|
||||
if (ret != 0) {
|
||||
if (HAK_ENV_SS_MADVISE_STRICT() && errno == EINVAL) {
|
||||
fprintf(stderr, "[SS_CACHE] madvise(MADV_POPULATE_WRITE) EINVAL (strict). Aborting.\n");
|
||||
abort();
|
||||
}
|
||||
// Fallback: explicit memset
|
||||
memset(ptr, 0, ss_size);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user