12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- #include "private.h"
- /*--------------------------------------------------------- */
- void
- lub_heap_init_free_block(lub_heap_t *this,
- void *start,
- size_t size,
- bool_t seg_start,
- bool_t seg_end)
- {
- lub_heap_free_block_t *block = start;
- lub_heap_tag_t *tail;
- words_t words;
-
- /* initialise the given memory */
- lub_heap_taint_memory(start,LUB_HEAP_TAINT_FREE,size);
- /* calculate the number of words in this segment */
- words = (size >> 2);
-
- /* setup the block */
- block->tag.segment = seg_start; /* start of a segment */
- block->tag.free = 1;
- block->tag.words = words;
-
- /* initialise the tree node */
- lub_bintree_node_init(&block->bt_node);
-
- /* now fill out the trailing tag */
- tail = lub_heap_block__get_tail((lub_heap_block_t*)block);
- tail->segment = seg_end; /* end of a segment */
- tail->free = 1;
- tail->words = words;
- /* now insert this free block into the tree */
- lub_bintree_insert(&this->free_tree,block);
- ++this->stats.free_blocks;
- this->stats.free_bytes += (words << 2);
- this->stats.free_bytes -= sizeof(lub_heap_alloc_block_t);
- this->stats.free_overhead += sizeof(lub_heap_alloc_block_t);
- }
- /*--------------------------------------------------------- */
|