summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorliang yongxiang <[email protected]>2018-07-10 10:10:45 +0800
committerliang yongxiang <[email protected]>2018-07-11 18:02:25 +0800
commit0509af9319377bdd60d5fdc0ce780d247093b3fc (patch)
treea60949a13b97782b47d52595568de94926814aa5 /src
parentade8822352581f0567c06ae3a49eb99b3260e954 (diff)
[kernel] add assert to memheap object
Diffstat (limited to 'src')
-rw-r--r--src/memheap.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/memheap.c b/src/memheap.c
index 7317ebdbab..de637f2685 100644
--- a/src/memheap.c
+++ b/src/memheap.c
@@ -134,6 +134,8 @@ RTM_EXPORT(rt_memheap_init);
rt_err_t rt_memheap_detach(struct rt_memheap *heap)
{
RT_ASSERT(heap);
+ RT_ASSERT(rt_object_get_type(&heap->parent) == RT_Object_Class_MemHeap);
+ RT_ASSERT(rt_object_is_systemobject(&heap->parent));
rt_object_detach(&(heap->lock.parent.parent));
rt_object_detach(&(heap->parent));
@@ -150,6 +152,7 @@ void *rt_memheap_alloc(struct rt_memheap *heap, rt_uint32_t size)
struct rt_memheap_item *header_ptr;
RT_ASSERT(heap != RT_NULL);
+ RT_ASSERT(rt_object_get_type(&heap->parent) == RT_Object_Class_MemHeap);
/* align allocated size */
size = RT_ALIGN(size, RT_ALIGN_SIZE);
@@ -295,6 +298,9 @@ void *rt_memheap_realloc(struct rt_memheap *heap, void *ptr, rt_size_t newsize)
struct rt_memheap_item *header_ptr;
struct rt_memheap_item *new_ptr;
+ RT_ASSERT(heap);
+ RT_ASSERT(rt_object_get_type(&heap->parent) == RT_Object_Class_MemHeap);
+
if (newsize == 0)
{
rt_memheap_free(ptr);
@@ -524,6 +530,9 @@ void rt_memheap_free(void *ptr)
/* get pool ptr */
heap = header_ptr->pool_ptr;
+ RT_ASSERT(heap);
+ RT_ASSERT(rt_object_get_type(&heap->parent) == RT_Object_Class_MemHeap);
+
/* lock memheap */
result = rt_sem_take(&(heap->lock), RT_WAITING_FOREVER);
if (result != RT_EOK)
@@ -631,6 +640,9 @@ void *rt_malloc(rt_size_t size)
object = rt_list_entry(node, struct rt_object, list);
heap = (struct rt_memheap *)object;
+ RT_ASSERT(heap);
+ RT_ASSERT(rt_object_get_type(&heap->parent) == RT_Object_Class_MemHeap);
+
/* not allocate in the default system heap */
if (heap == &_heap)
continue;