aboutsummaryrefslogtreecommitdiffstats
path: root/src/gos
diff options
context:
space:
mode:
authorinmarket <andrewh@inmarket.com.au>2013-12-21 15:12:36 +1000
committerinmarket <andrewh@inmarket.com.au>2013-12-21 15:12:36 +1000
commit86083b368d93db6c00f1be2e058b3dc4396f1b52 (patch)
treeea0c88453d1c2bcd3163fb1de43a95f3944ed3ed /src/gos
parent225aa27233242281452aa30e07475374a9d6bc55 (diff)
downloaduGFX-86083b368d93db6c00f1be2e058b3dc4396f1b52.tar.gz
uGFX-86083b368d93db6c00f1be2e058b3dc4396f1b52.tar.bz2
uGFX-86083b368d93db6c00f1be2e058b3dc4396f1b52.zip
Fixes for the GOS Raw32 memory allocator.
Diffstat (limited to 'src/gos')
-rw-r--r--src/gos/raw32.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/gos/raw32.c b/src/gos/raw32.c
index 63a124ec..5a65ea86 100644
--- a/src/gos/raw32.c
+++ b/src/gos/raw32.c
@@ -109,14 +109,16 @@ void gfxExit(void) {
// Free Slot - immediately follows the memslot structure
typedef struct freeslot {
memslot *nextfree; // The next free slot
- }
+ } freeslot;
#define GetSlotSize(sz) ((((sz) + (sizeof(freeslot) - 1)) & ~(sizeof(freeslot) - 1)) + sizeof(memslot))
#define NextFree(pslot) ((freeslot *)Slot2Ptr(pslot))->nextfree
#define Ptr2Slot(p) ((memslot *)(p) - 1)
#define Slot2Ptr(pslot) ((pslot)+1)
- static memslot * firstSlot, *lastSlot, *freeSlots;
+ static memslot * firstSlot;
+ static memslot * lastSlot;
+ static memslot * freeSlots;
static char heap[GOS_RAW_HEAP_SIZE];
static void _gosHeapInit(void) {
@@ -131,7 +133,7 @@ void gfxExit(void) {
if (lastSlot)
lastSlot->next = (memslot *)ptr;
else
- firstSlot = lastSlot = freeSlot = (memslot *)ptr;
+ firstSlot = lastSlot = freeSlots = (memslot *)ptr;
lastSlot->next = 0;
lastSlot->sz = sz;
@@ -156,8 +158,8 @@ void gfxExit(void) {
p->sz = sz;
if (lastSlot == p)
lastSlot = new;
- NextFree(new) = freeSlots;
- freeSlots = new;
+ NextFree(new) = NextFree(p);
+ NextFree(p) = new;
}
// Remove it from the free list
if (prev)
@@ -223,7 +225,7 @@ void gfxExit(void) {
if ((new = gfxAlloc(sz)))
return 0;
memcpy(new, ptr, p->sz - sizeof(memslot));
- free(ptr);
+ gfxFree(ptr);
return new;
}