diff --git a/libports/src/lib/libc/libc_mem_alloc.cc b/libports/src/lib/libc/libc_mem_alloc.cc index 19ba2796a9..ecb7a2ea24 100644 --- a/libports/src/lib/libc/libc_mem_alloc.cc +++ b/libports/src/lib/libc/libc_mem_alloc.cc @@ -88,7 +88,7 @@ namespace Libc { _ram_session = ram, _rm_session = rm; } }; - Lock _lock; + Lock mutable _lock; Dataspace_pool _ds_pool; /* list of dataspaces */ Allocator_avl _alloc; /* local allocator */ size_t _chunk_size; @@ -114,6 +114,7 @@ namespace Libc { void *alloc(Genode::size_t size, Genode::size_t align_log2); void free(void *ptr); + Genode::size_t size_at(void const *ptr) const; }; } @@ -223,6 +224,16 @@ void Libc::Mem_alloc_impl::free(void *addr) } +Genode::size_t Libc::Mem_alloc_impl::size_at(void const *addr) const +{ + /* serialize access of heap functions */ + Lock::Guard lock_guard(_lock); + + /* forward request to our local allocator */ + return _alloc.size_at(addr); +} + + Libc::Mem_alloc *Libc::mem_alloc() { static Libc::Mem_alloc_impl inst; diff --git a/libports/src/lib/libc/libc_mem_alloc.h b/libports/src/lib/libc/libc_mem_alloc.h index f8fc3c2fa9..3939fb1704 100644 --- a/libports/src/lib/libc/libc_mem_alloc.h +++ b/libports/src/lib/libc/libc_mem_alloc.h @@ -16,6 +16,7 @@ namespace Libc { { virtual void *alloc(Genode::size_t size, Genode::size_t align_log2) = 0; virtual void free(void *ptr) = 0; + virtual Genode::size_t size_at(void const *ptr) const = 0; }; /**