libc: fix size calculation in 'Mem_alloc_impl::alloc'

When allocating new backing store in 'Mem_alloc_impl::alloc()', the
requested alignment needs to be considered in the size calculation.

Fixes #973.
This commit is contained in:
Christian Prochaska 2013-11-15 22:40:46 +01:00 committed by Norman Feske
parent ca9ae43e50
commit bef7086f20

View File

@ -187,10 +187,11 @@ void *Libc::Mem_alloc_impl::alloc(size_t size, size_t align_log2)
/* /*
* Calculate block size of needed backing store. The block must hold the * Calculate block size of needed backing store. The block must hold the
* requested 'size' and a new Dataspace structure if the allocation above * requested 'size' with the requested alignment and a new Dataspace
* failed. Finally, we align the size to a 4K page. * structure if the allocation above failed.
* Finally, we align the size to a 4K page.
*/ */
size_t request_size = size + 1024; size_t request_size = size + max((1 << align_log2), 1024);
if (request_size < _chunk_size*sizeof(umword_t)) { if (request_size < _chunk_size*sizeof(umword_t)) {
request_size = _chunk_size*sizeof(umword_t); request_size = _chunk_size*sizeof(umword_t);