diff --git a/base-hw/src/core/include/cpu_thread_allocator.h b/base-hw/src/core/include/cpu_thread_allocator.h index bd699b4c4b..f930816c7c 100644 --- a/base-hw/src/core/include/cpu_thread_allocator.h +++ b/base-hw/src/core/include/cpu_thread_allocator.h @@ -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(); } }; } diff --git a/base-linux/src/core/include/platform.h b/base-linux/src/core/include/platform.h index 477e3c17ba..34fa3d804d 100644 --- a/base-linux/src/core/include/platform.h +++ b/base-linux/src/core/include/platform.h @@ -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; diff --git a/base/include/base/allocator.h b/base/include/base/allocator.h index c59aeee379..55a6da8c99 100644 --- a/base/include/base/allocator.h +++ b/base/include/base/allocator.h @@ -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; }; diff --git a/base/include/base/allocator_avl.h b/base/include/base/allocator_avl.h index dd0394121b..b7eba7d33f 100644 --- a/base/include/base/allocator_avl.h +++ b/base/include/base/allocator_avl.h @@ -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; } }; diff --git a/base/include/base/allocator_guard.h b/base/include/base/allocator_guard.h index 9fd25c68ee..1feba9859a 100644 --- a/base/include/base/allocator_guard.h +++ b/base/include/base/allocator_guard.h @@ -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(); } }; } diff --git a/base/include/base/heap.h b/base/include/base/heap.h index ba0368e528..ba4494ae2c 100644 --- a/base/include/base/heap.h +++ b/base/include/base/heap.h @@ -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; } }; } diff --git a/base/include/base/slab.h b/base/include/base/slab.h index aa246de7b6..25aad44156 100644 --- a/base/include/base/slab.h +++ b/base/include/base/slab.h @@ -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; } }; } diff --git a/base/include/base/sync_allocator.h b/base/include/base/sync_allocator.h index 3f0273564b..8042fe2182 100644 --- a/base/include/base/sync_allocator.h +++ b/base/include/base/sync_allocator.h @@ -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 ** diff --git a/base/src/core/include/core_mem_alloc.h b/base/src/core/include/core_mem_alloc.h index 83115aa4c4..1717a0e8fd 100644 --- a/base/src/core/include/core_mem_alloc.h +++ b/base/src/core/include/core_mem_alloc.h @@ -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(); } }; } diff --git a/dde_linux/src/lib/lxip/lxcc_emul.cc b/dde_linux/src/lib/lxip/lxcc_emul.cc index 60917e4258..a851304b44 100644 --- a/dde_linux/src/lib/lxip/lxcc_emul.cc +++ b/dde_linux/src/lib/lxip/lxcc_emul.cc @@ -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. diff --git a/dde_linux/src/lib/usb/lx_emul.cc b/dde_linux/src/lib/usb/lx_emul.cc index d71c3424a2..f1f1659da6 100644 --- a/dde_linux/src/lib/usb/lx_emul.cc +++ b/dde_linux/src/lib/usb/lx_emul.cc @@ -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. diff --git a/libports/src/lib/libc/malloc.cc b/libports/src/lib/libc/malloc.cc index ecf1fd6247..8173365e96 100644 --- a/libports/src/lib/libc/malloc.cc +++ b/libports/src/lib/libc/malloc.cc @@ -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; } }; diff --git a/os/include/nic/packet_allocator.h b/os/include/nic/packet_allocator.h index 8fe335f159..4f2c13166b 100644 --- a/os/include/nic/packet_allocator.h +++ b/os/include/nic/packet_allocator.h @@ -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 ** diff --git a/os/src/lib/dde_kit/memory.cc b/os/src/lib/dde_kit/memory.cc index cf3ced267c..2dc41326c4 100644 --- a/os/src/lib/dde_kit/memory.cc +++ b/os/src/lib/dde_kit/memory.cc @@ -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; } }; diff --git a/os/src/test/ram_fs_chunk/main.cc b/os/src/test/ram_fs_chunk/main.cc index 3d9ad3de12..5d4dc1c4a4 100644 --- a/os/src/test/ram_fs_chunk/main.cc +++ b/os/src/test/ram_fs_chunk/main.cc @@ -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(); } }; };