Make Deallocator::need_size_for_free() pure virtual

This commit is contained in:
Christian Helmuth 2014-01-23 09:41:51 +01:00
parent 32f6d75cdb
commit 3234e4f775
15 changed files with 42 additions and 9 deletions

View File

@ -50,18 +50,19 @@ namespace Genode
_alloc->free(addr, size); } _alloc->free(addr, size); }
size_t consumed() { size_t consumed() {
PDBG("Unexprected call"); PDBG("Unexpected call");
while (1) ; while (1) ;
return 0; return 0;
} }
size_t overhead(size_t size) { size_t overhead(size_t size) {
PDBG("Unexprected call"); PDBG("Unexpected call");
while (1) ; while (1) ;
return 0; return 0;
} }
bool need_size_for_free() const { return true; } bool need_size_for_free() const override {
return _alloc->need_size_for_free(); }
}; };
} }

View File

@ -65,6 +65,8 @@ namespace Genode {
size_t avail() { return ~0; } size_t avail() { return ~0; }
bool valid_addr(addr_t) { return true; } bool valid_addr(addr_t) { return true; }
size_t overhead(size_t) { return 0; } size_t overhead(size_t) { return 0; }
bool need_size_for_free() const override { return true; }
}; };
Pseudo_ram_allocator _ram_alloc; Pseudo_ram_allocator _ram_alloc;

View File

@ -39,7 +39,7 @@ namespace Genode {
* See the documentation of 'operator delete(void *, Allocator *)' * See the documentation of 'operator delete(void *, Allocator *)'
* below for more details. * below for more details.
*/ */
virtual bool need_size_for_free() const { return true; } virtual bool need_size_for_free() const = 0;
}; };

View File

@ -243,7 +243,7 @@ namespace Genode {
*/ */
size_t overhead(size_t) { return sizeof(Block) + sizeof(umword_t); } size_t overhead(size_t) { return sizeof(Block) + sizeof(umword_t); }
bool need_size_for_free() const { return false; } bool need_size_for_free() const override { return false; }
}; };

View File

@ -103,6 +103,9 @@ namespace Genode {
* Return meta-data overhead per block * Return meta-data overhead per block
*/ */
size_t overhead(size_t size) { return _allocator->overhead(size); } size_t overhead(size_t size) { return _allocator->overhead(size); }
bool need_size_for_free() const override {
return _allocator->need_size_for_free(); }
}; };
} }

View File

@ -153,7 +153,7 @@ namespace Genode {
void free(void *, size_t); void free(void *, size_t);
size_t consumed() { return _quota_used; } size_t consumed() { return _quota_used; }
size_t overhead(size_t size) { return _alloc.overhead(size); } size_t overhead(size_t size) { return _alloc.overhead(size); }
bool need_size_for_free() const { return false; } bool need_size_for_free() const override { return false; }
}; };
@ -193,7 +193,7 @@ namespace Genode {
void free(void *, size_t); void free(void *, size_t);
size_t consumed() { return _consumed; } size_t consumed() { return _consumed; }
size_t overhead(size_t size); size_t overhead(size_t size);
bool need_size_for_free() const { return false; } bool need_size_for_free() const override { return false; }
}; };
} }

View File

@ -249,7 +249,7 @@ namespace Genode {
void free(void *addr, size_t) { free(addr); } void free(void *addr, size_t) { free(addr); }
size_t consumed(); size_t consumed();
size_t overhead(size_t) { return _block_size/_num_elem; } size_t overhead(size_t) { return _block_size/_num_elem; }
bool need_size_for_free() const { return false; } bool need_size_for_free() const override { return false; }
}; };
} }

View File

@ -92,6 +92,12 @@ namespace Genode {
Lock::Guard lock_guard(*_lock); Lock::Guard lock_guard(*_lock);
return _alloc.overhead(size); return _alloc.overhead(size);
} }
bool need_size_for_free() const override
{
Lock::Guard lock_guard(*_lock);
return _alloc.need_size_for_free();
}
}; };
/** /**
@ -191,6 +197,12 @@ namespace Genode {
return _alloc.overhead(size); return _alloc.overhead(size);
} }
bool need_size_for_free() const override
{
Lock::Guard lock_guard(*_lock);
return _alloc.need_size_for_free();
}
/******************************* /*******************************
** Range-allocator interface ** ** Range-allocator interface **

View File

@ -88,6 +88,9 @@ namespace Genode {
void free(void *addr, size_t size) { _alloc.free(addr, size); } void free(void *addr, size_t size) { _alloc.free(addr, size); }
size_t consumed() { return _phys_alloc->consumed(); } size_t consumed() { return _phys_alloc->consumed(); }
size_t overhead(size_t size) { return _phys_alloc->overhead(size); } size_t overhead(size_t size) { return _phys_alloc->overhead(size); }
bool need_size_for_free() const override {
return _phys_alloc->need_size_for_free(); }
}; };
@ -166,6 +169,9 @@ namespace Genode {
size_t consumed() { return _phys_alloc.consumed(); } size_t consumed() { return _phys_alloc.consumed(); }
size_t overhead(size_t size) { return _phys_alloc.overhead(size); } size_t overhead(size_t size) { return _phys_alloc.overhead(size); }
bool need_size_for_free() const override {
return _phys_alloc.need_size_for_free(); }
}; };
} }

View File

@ -115,6 +115,7 @@ class Genode::Slab_backend_alloc : public Genode::Allocator,
void free(void *addr, size_t /* size */) { } void free(void *addr, size_t /* size */) { }
size_t overhead(size_t size) { return 0; } size_t overhead(size_t size) { return 0; }
bool need_size_for_free() const override { return false; }
/** /**
* Return phys address for given virtual addr. * Return phys address for given virtual addr.

View File

@ -117,6 +117,7 @@ class Genode::Slab_backend_alloc : public Genode::Allocator,
void free(void *addr, size_t /* size */) { } void free(void *addr, size_t /* size */) { }
size_t overhead(size_t size) { return 0; } size_t overhead(size_t size) { return 0; }
bool need_size_for_free() const override { return false; }
/** /**
* Return phys address for given virtual addr. * Return phys address for given virtual addr.

View File

@ -150,6 +150,8 @@ class Malloc : public Genode::Allocator
return _allocator[_slab_log2(size) - SLAB_START]->overhead(size); return _allocator[_slab_log2(size) - SLAB_START]->overhead(size);
} }
bool need_size_for_free() const override { return false; }
}; };

View File

@ -112,6 +112,8 @@ namespace Nic {
void free(void *addr, Genode::size_t) { free(addr); } void free(void *addr, Genode::size_t) { free(addr); }
bool need_size_for_free() const override { return false; }
/********************* /*********************
** Dummy functions ** ** Dummy functions **

View File

@ -155,6 +155,8 @@ class Backing_store_allocator : public Allocator
size_t consumed() { return _consumed; } size_t consumed() { return _consumed; }
size_t overhead(size_t size) { return 0; } size_t overhead(size_t size) { return 0; }
bool need_size_for_free() const override { return false; }
}; };

View File

@ -42,7 +42,8 @@ namespace Genode {
_wrapped.free(addr, size); _wrapped.free(addr, size);
} }
size_t overhead(size_t size) { return 0; } size_t overhead(size_t size) override { return _wrapped.overhead(size); }
bool need_size_for_free() const override { return _wrapped.need_size_for_free(); }
}; };
}; };