void *mm_malloc(MM *mm, size_t size) { void *ret; if (!mm_lock(mm)) return NULL; ret = mm_malloc_nolock(mm, size); mm_unlock(mm); return ret; }
size_t mm_available(MM *mm) { size_t available; if (mm != NULL && mm_lock(mm)) { available = mm->available; mm_unlock(mm); return available; } return 0; }
size_t mm_sizeof(MM *mm, void *x) { mm_mem_head *p; size_t ret; if (mm == NULL || x == NULL || !mm_lock(mm)) return 0; p = PTR_TO_HEAD(x); ret = p->size; mm_unlock(mm); return ret; }
size_t mm_maxsize(MM *mm) { size_t ret = MM_SIZE(0); mm_free_bucket *p; if (!mm_lock(mm)) return 0; p = mm->free_list; while (p != NULL) { if (p->size > ret) ret = p->size; p = p->next; } mm_unlock(mm); return ret - MM_SIZE(0); }
int MM_unlock(void) { if (mm_global == NULL) return FALSE; return mm_unlock(mm_global); }
void mm_free(MM *mm, void *x) { mm_lock(mm); mm_free_nolock(mm, x); mm_unlock(mm); }