// tiny_publish.c - Publish aggregator box #include "hakmem_tiny.h" #include "box/mailbox_box.h" #include "tiny_publish.h" #include "hakmem_tiny_stats_api.h" #include "tiny_debug_ring.h" #include "hakmem_trace_master.h" #include #include // externs from main TU // bench/hot handling remains in core if needed; mailbox publish is always safe void tiny_publish_notify(int class_idx, SuperSlab* ss, int slab_idx) { if (__builtin_expect(class_idx < 0 || class_idx >= TINY_NUM_CLASSES, 0)) { tiny_debug_ring_record(TINY_RING_EVENT_SUPERSLAB_ADOPT_FAIL, (uint16_t)0xEEu, ss, (uintptr_t)class_idx); return; } g_pub_notify_calls[class_idx]++; tiny_debug_ring_record(TINY_RING_EVENT_SUPERSLAB_PUBLISH, (uint16_t)class_idx, ss, (uintptr_t)slab_idx); // One-shot visibility trace (env: HAKMEM_TINY_RF_TRACE or HAKMEM_TRACE=refill) #if !HAKMEM_BUILD_RELEASE static int trace_en = -1; if (__builtin_expect(trace_en == -1, 0)) { trace_en = hak_trace_check("HAKMEM_TINY_RF_TRACE", "refill"); } if (trace_en) { static _Atomic int printed[8]; int expected = 0; if (atomic_compare_exchange_strong(&printed[class_idx], &expected, 1)) { fprintf(stderr, "[PUBTRACE] notify class=%d ss=%p slab=%d\n", class_idx, (void*)ss, slab_idx); } } #endif mailbox_box_publish(class_idx, ss, slab_idx); }