diff --git a/portable/MemMang/heap_2.c b/portable/MemMang/heap_2.c index 5c3cb55b1..c04144395 100644 --- a/portable/MemMang/heap_2.c +++ b/portable/MemMang/heap_2.c @@ -229,9 +229,10 @@ void * pvPortMalloc( size_t xWantedSize ) pxNewBlockLink->xBlockSize = pxBlock->xBlockSize - xWantedSize; pxBlock->xBlockSize = xWantedSize; - /* Insert the new block into the list of free blocks. */ - pxNewBlockLink->pxNextFreeBlock = pxPreviousBlock->pxNextFreeBlock; - pxPreviousBlock->pxNextFreeBlock = pxNewBlockLink; + /* Insert the new block into the list of free blocks. + * The list of free blocks is sorted by their size, we have to + * iterate to find the right place to insert new block. */ + prvInsertBlockIntoFreeList( ( pxNewBlockLink ) ); } xFreeBytesRemaining -= pxBlock->xBlockSize;