summaryrefslogtreecommitdiff
path: root/src/mem.c
diff options
context:
space:
mode:
authorbernard.xiong <[email protected]>2011-03-21 07:40:09 +0000
committerbernard.xiong <[email protected]>2011-03-21 07:40:09 +0000
commit8dbcab1c4ae107a1f8b352b23dd3d09ecd4ba56b (patch)
treee5f5ab1423ce6831a2b8cb114275b4c0382484f3 /src/mem.c
parente9148ab6c71daedd18cc240e254065be5688a0a5 (diff)
update more debug information.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1338 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'src/mem.c')
-rw-r--r--src/mem.c38
1 files changed, 21 insertions, 17 deletions
diff --git a/src/mem.c b/src/mem.c
index 4afc7ebd96..b928430628 100644
--- a/src/mem.c
+++ b/src/mem.c
@@ -233,7 +233,7 @@ void *rt_malloc(rt_size_t size)
rt_kprintf("malloc size %d, but align to %d\n", size, RT_ALIGN(size, RT_ALIGN_SIZE));
else
rt_kprintf("malloc size %d\n", size);
-#endif
+#endif
/* alignment size */
size = RT_ALIGN(size, RT_ALIGN_SIZE);
@@ -327,7 +327,9 @@ void *rt_malloc(rt_size_t size)
RT_ASSERT((((rt_uint32_t)mem) & (RT_ALIGN_SIZE-1)) == 0);
#ifdef RT_MEM_DEBUG
- rt_kprintf("allocate memory at 0x%x\n", (rt_uint32_t)((rt_uint8_t*)mem + SIZEOF_STRUCT_MEM));
+ rt_kprintf("allocate memory at 0x%x, size: %d\n",
+ (rt_uint32_t)((rt_uint8_t*)mem + SIZEOF_STRUCT_MEM),
+ (rt_uint32_t)(mem->next - ((rt_uint8_t*)mem - heap_ptr)));
#endif
#ifdef RT_USING_HOOK
@@ -467,37 +469,39 @@ void rt_free(void *rmem)
if (rmem == RT_NULL) return;
RT_ASSERT((((rt_uint32_t)rmem) & (RT_ALIGN_SIZE-1)) == 0);
+ RT_ASSERT((rt_uint8_t *)rmem >= (rt_uint8_t *)heap_ptr &&
+ (rt_uint8_t *)rmem < (rt_uint8_t *)heap_end);
#ifdef RT_USING_HOOK
if (rt_free_hook != RT_NULL) rt_free_hook(rmem);
-#endif
-
-#ifdef RT_MEM_DEBUG
- rt_kprintf("release memory 0x%x\n", (rt_uint32_t)rmem);
-#endif
-
- /* protect the heap from concurrent access */
- rt_sem_take(&heap_sem, RT_WAITING_FOREVER);
-
- RT_ASSERT((rt_uint8_t *)rmem >= (rt_uint8_t *)heap_ptr &&
- (rt_uint8_t *)rmem < (rt_uint8_t *)heap_end);
+#endif
if ((rt_uint8_t *)rmem < (rt_uint8_t *)heap_ptr || (rt_uint8_t *)rmem >= (rt_uint8_t *)heap_end)
{
#ifdef RT_MEM_DEBUG
rt_kprintf("illegal memory\n");
#endif
- /* illegal memory */
- rt_sem_release(&heap_sem);
return;
}
/* Get the corresponding struct heap_mem ... */
mem = (struct heap_mem *)((rt_uint8_t *)rmem - SIZEOF_STRUCT_MEM);
+
+#ifdef RT_MEM_DEBUG
+ rt_kprintf("release memory 0x%x, size: %d\n",
+ (rt_uint32_t)rmem,
+ (rt_uint32_t)(mem->next - ((rt_uint8_t*)mem - heap_ptr)));
+#endif
+
+ /* protect the heap from concurrent access */
+ rt_sem_take(&heap_sem, RT_WAITING_FOREVER);
+
/* ... which has to be in a used state ... */
- RT_ASSERT(mem->used);
+ RT_ASSERT(mem->used);
+ RT_ASSERT(mem->magic != HEAP_MAGIC);
/* ... and is now unused. */
- mem->used = 0;
+ mem->used = 0;
+ mem->magic = 0;
if (mem < lfree)
{