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); }
size_t consumed() {
PDBG("Unexprected call");
PDBG("Unexpected call");
while (1) ;
return 0;
}
size_t overhead(size_t size) {
PDBG("Unexprected call");
PDBG("Unexpected call");
while (1) ;
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; }
bool valid_addr(addr_t) { return true; }
size_t overhead(size_t) { return 0; }
bool need_size_for_free() const override { return true; }
};
Pseudo_ram_allocator _ram_alloc;

View File

@ -39,7 +39,7 @@ namespace Genode {
* See the documentation of 'operator delete(void *, Allocator *)'
* 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); }
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
*/
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);
size_t consumed() { return _quota_used; }
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);
size_t consumed() { return _consumed; }
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); }
size_t consumed();
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);
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);
}
bool need_size_for_free() const override
{
Lock::Guard lock_guard(*_lock);
return _alloc.need_size_for_free();
}
/*******************************
** Range-allocator interface **

View File

@ -88,6 +88,9 @@ namespace Genode {
void free(void *addr, size_t size) { _alloc.free(addr, size); }
size_t consumed() { return _phys_alloc->consumed(); }
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 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 */) { }
size_t overhead(size_t size) { return 0; }
bool need_size_for_free() const override { return false; }
/**
* 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 */) { }
size_t overhead(size_t size) { return 0; }
bool need_size_for_free() const override { return false; }
/**
* 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);
}
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); }
bool need_size_for_free() const override { return false; }
/*********************
** Dummy functions **

View File

@ -155,6 +155,8 @@ class Backing_store_allocator : public Allocator
size_t consumed() { return _consumed; }
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);
}
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(); }
};
};