Kernel/armv7 - Fixed for threading changes
[tpg/acess2.git] / Kernel / heap.c
index e53f5b8..eefd13c 100644 (file)
@@ -49,7 +49,6 @@ void Heap_Install(void)
 }
 
 /**
- * \fn void *Heap_Extend(int Bytes)
  * \brief Extend the size of the heap
  */
 void *Heap_Extend(int Bytes)
@@ -69,7 +68,7 @@ void *Heap_Extend(int Bytes)
        
        // Bounds Check
        if( (tVAddr)gHeapEnd + ((Bytes+0xFFF)&~0xFFF) > MM_KHEAP_MAX ) {
-               Bytes = MM_KHEAP_MAX - (tVAddr)gHeapEnd;
+//             Bytes = MM_KHEAP_MAX - (tVAddr)gHeapEnd;
                return NULL;
        }
        
@@ -97,7 +96,6 @@ void *Heap_Extend(int Bytes)
 }
 
 /**
- * \fn void *Heap_Merge(tHeapHead *Head)
  * \brief Merges two ajacent heap blocks
  */
 void *Heap_Merge(tHeapHead *Head)
@@ -142,10 +140,9 @@ void *Heap_Merge(tHeapHead *Head)
 }
 
 /**
- * \brief Allocate memory from the heap
  * \param File Allocating source file
  * \param Line Source line
- * \param Bytes        Size of region to allocate
+ * \param __Bytes      Size of region to allocate
  */
 void *Heap_Allocate(const char *File, int Line, size_t __Bytes)
 {
@@ -216,7 +213,8 @@ void *Heap_Allocate(const char *File, int Line, size_t __Bytes)
                        head->AllocateTime = now();
                        Mutex_Release(&glHeap); // Release spinlock
                        #if DEBUG_TRACE
-                       Debug("[Heap   ] Malloc'd %p (%i bytes), returning to %p", head->Data, head->Size,  __builtin_return_address(0));
+                       Debug("[Heap   ] Malloc'd %p (%i bytes), returning to %p",
+                               head->Data, head->Size,  __builtin_return_address(0));
                        #endif
                        return head->Data;
                }
@@ -285,7 +283,6 @@ void *Heap_Allocate(const char *File, int Line, size_t __Bytes)
 }
 
 /**
- * \fn void Heap_Deallocate(void *Ptr)
  * \brief Free an allocated memory block
  */
 void Heap_Deallocate(void *Ptr)
@@ -687,7 +684,10 @@ void Heap_Stats(void)
        else
                frag = 0;
        Log_Log("Heap", "%i.%02i%% Heap Fragmentation", frag/100, frag%100);
-       avgAlloc = (totalBytes-freeBytes)/(nBlocks-nFree);
+       if(nBlocks <= nFree)
+               avgAlloc = 0;
+       else
+               avgAlloc = (totalBytes-freeBytes)/(nBlocks-nFree);
        if(avgAlloc != 0)
                overhead = (sizeof(tHeapFoot)+sizeof(tHeapHead))*10000/avgAlloc;
        else
@@ -700,6 +700,7 @@ void Heap_Stats(void)
        
        // Scan and get distribution
        #if 1
+       if(nBlocks > 0)
        {
                struct {
                        Uint    Size;

UCC git Repository :: git.ucc.asn.au