123456789101112131415161718192021222324252627282930313233343536373839404142 |
- #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);
- }
- /*--------------------------------------------------------- */
|