aboutsummaryrefslogtreecommitdiffstats
path: root/src/chheap.c
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-02-20 20:14:42 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-02-20 20:14:42 +0000
commitdaabc2b079b17a41ca2f1a2a6423373f811402ba (patch)
tree9a1b5552939d5ee04de29b10e0de0eb4defedea9 /src/chheap.c
parent83762f45fdeaa0702186ce7773242859350c90ab (diff)
downloadChibiOS-daabc2b079b17a41ca2f1a2a6423373f811402ba.tar.gz
ChibiOS-daabc2b079b17a41ca2f1a2a6423373f811402ba.tar.bz2
ChibiOS-daabc2b079b17a41ca2f1a2a6423373f811402ba.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@791 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'src/chheap.c')
-rw-r--r--src/chheap.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/chheap.c b/src/chheap.c
index f2bcc2b9e..adfe2842f 100644
--- a/src/chheap.c
+++ b/src/chheap.c
@@ -153,16 +153,20 @@ void *chHeapAlloc(size_t size) {
void chHeapFree(void *p) {
struct header *qp, *hp;
- hp = (struct header *)p - 1;
-
- chDbgAssert(hp->h_magic == MAGIC, "chheap.c, chHeapFree() #1");
+ chDbgCheck(p != NULL, "chHeapFree");
+ hp = (struct header *)p - 1;
+ chDbgAssert(hp->h_magic == MAGIC,
+ "chHeapFree(), #1",
+ "it is not magic");
qp = &heap.free;
H_LOCK();
while (TRUE) {
- chDbgAssert((hp < qp) || (hp >= LIMIT(qp)), "chheap.c, chHeapFree() #2");
+ chDbgAssert((hp < qp) || (hp >= LIMIT(qp)),
+ "chHeapFree(), #2",
+ "within free block");
if (((qp == &heap.free) || (hp > qp)) &&
((qp->h_next == NULL) || (hp < qp->h_next))) {
@@ -244,19 +248,17 @@ void *chHeapAlloc(size_t size) {
void *p;
H_LOCK();
-
p = malloc(size);
-
H_UNLOCK();
return p;
}
void chHeapFree(void *p) {
- H_LOCK();
+ chDbgCheck(p != NULL, "chHeapFree");
+ H_LOCK();
free(p);
-
H_UNLOCK();
}