Explorar o código

[Kernel] Fix sem_release twice issue in slab.

bernard %!s(int64=7) %!d(string=hai) anos
pai
achega
c733086354
Modificáronse 1 ficheiros con 5 adicións e 7 borrados
  1. 5 7
      src/slab.c

+ 5 - 7
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);