Configurable clearing of array in Bit_array_base

Fixes #1177.
This commit is contained in:
Christian Helmuth 2014-06-11 16:30:30 +02:00 committed by Norman Feske
parent 24941ffaeb
commit f7a7421091
2 changed files with 5 additions and 4 deletions

View File

@ -92,14 +92,14 @@ namespace Genode {
public:
Bit_array_base(unsigned bits, addr_t *addr)
Bit_array_base(unsigned bits, addr_t *addr, bool clear)
: _bit_cnt(bits),
_word_cnt(_bit_cnt / _BITS_PER_WORD),
_words(addr)
{
if (!bits || bits % _BITS_PER_WORD) throw Invalid_bit_count();
memset(_words, 0, sizeof(addr_t)*_word_cnt);
if (clear) memset(_words, 0, sizeof(addr_t)*_word_cnt);
}
/**
@ -144,7 +144,7 @@ namespace Genode {
public:
Bit_array() : Bit_array_base(BITS, _array) { }
Bit_array() : Bit_array_base(BITS, _array, true) { }
};
}

View File

@ -76,7 +76,8 @@ class Genode::Packet_allocator : public Genode::Range_allocator
_base = base;
_bits = _md_alloc->alloc(_block_cnt(size)/8);
_array = new (_md_alloc) Bit_array_base(_block_cnt(size),
(addr_t*)_bits);
(addr_t*)_bits,
true);
return 0;
}