static Arena* find_arena(GCObjectPtr ptr) { void* arena_ptr = PTR_TO_ARENA(ptr); Arena* local_arenas[MAX_ARENAS]; int local_num_arenas; LOCK_ARENAS(); local_num_arenas = num_arenas; memmove (local_arenas, heap_arenas, local_num_arenas*sizeof(Arena*)); UNLOCK_ARENAS(); void* rv = bsearch (&arena_ptr, local_arenas, local_num_arenas, sizeof(Arena*), compare_ptrs); if (!rv) return NULL; return *(Arena**)rv; }
void* ptr_to_arena(void* ptr) { return PTR_TO_ARENA(ptr); }