diff --git a/src/slab.c b/src/slab.c index 14a2c784b5407ca1d297f3c085d4f5b32b788d21..5e6a204896015516bc7613e7151c7937b5da486b 100644 --- a/src/slab.c +++ b/src/slab.c @@ -616,7 +616,10 @@ void *rt_malloc(rt_size_t size) /* allocate a zone from page */ z = rt_page_alloc(zone_size / RT_MM_PAGE_SIZE); if (z == RT_NULL) - goto fail; + { + chunk = RT_NULL; + goto __exit; + } /* lock heap */ rt_sem_take(&heap_sem, RT_WAITING_FOREVER); @@ -672,15 +675,10 @@ void *rt_malloc(rt_size_t size) done: rt_sem_release(&heap_sem); - RT_OBJECT_HOOK_CALL(rt_malloc_hook, ((char *)chunk, size)); +__exit: return chunk; - -fail: - rt_sem_release(&heap_sem); - - return RT_NULL; } RTM_EXPORT(rt_malloc);