diff options
author | Alex Auvolat <alex@adnab.me> | 2016-07-14 11:45:11 +0200 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2016-07-14 11:45:11 +0200 |
commit | 2f13288a23da4dfaf6c40e1e943f83d8fa43145a (patch) | |
tree | 3b550ad22a00676470ceb2815afd21f42dfd8aae /src/common/libkogata/region_alloc.c | |
parent | 477911553e0443fcafad5bd96c97314aa2f8d9ea (diff) | |
download | kogata-2f13288a23da4dfaf6c40e1e943f83d8fa43145a.tar.gz kogata-2f13288a23da4dfaf6c40e1e943f83d8fa43145a.zip |
Fix sme warnings...
Diffstat (limited to 'src/common/libkogata/region_alloc.c')
-rw-r--r-- | src/common/libkogata/region_alloc.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/common/libkogata/region_alloc.c b/src/common/libkogata/region_alloc.c index 96a0f07..1f2fe0f 100644 --- a/src/common/libkogata/region_alloc.c +++ b/src/common/libkogata/region_alloc.c @@ -86,6 +86,13 @@ void remove_free_region(descriptor_t *d) { } } +descriptor_t *_region_alloc_rec_check_first_bigger(descriptor_t *it, size_t sz) { + if (it == 0) return 0; + ASSERT(_region_alloc_rec_check_first_bigger(it->free.next_by_size, it->free.size) == it->free.first_bigger); + if (it->free.size > sz) return it; + return it->free.first_bigger; +} + void add_free_region(descriptor_t *d) { /*dbg_printf("Add free region 0x%p - 0x%p\n", d->free.addr, d->free.size + d->free.addr);*/ // Find position of region in address-ordered list @@ -119,7 +126,8 @@ void add_free_region(descriptor_t *d) { d->free.next_by_addr = i; first_free_region_by_addr = d; } else { - while (i != 0) { + while (true) { + ASSERT(i != 0); ASSERT(d->free.addr > i->free.addr); if (i->free.addr + i->free.size == d->free.addr) { // concatenate i . d @@ -193,13 +201,7 @@ void add_free_region(descriptor_t *d) { // Explanation: the first_bigger field is meant to point at the first free descriptor with strictly // superior size, intending to make the finding a suitable free region faster, but this field // is a bit complicated to keep up to date (see the messy code above...) - descriptor_t *rec_check_first_bigger(descriptor_t *it, size_t sz) { - if (it == 0) return 0; - ASSERT(rec_check_first_bigger(it->free.next_by_size, it->free.size) == it->free.first_bigger); - if (it->free.size > sz) return it; - return it->free.first_bigger; - } - ASSERT(rec_check_first_bigger(first_free_region_by_size, 0) == first_free_region_by_size); + ASSERT(_region_alloc_rec_check_first_bigger(first_free_region_by_size, 0) == first_free_region_by_size); } descriptor_t *find_used_region(void* addr) { |