From 507c9eb340a71f317d85cd7cd7ceb2232ba9b838 Mon Sep 17 00:00:00 2001 From: Antonio SJ Musumeci Date: Sun, 22 Feb 2026 17:59:46 -0600 Subject: [PATCH] Rework objpool --- libfuse/include/objpool.hpp | 39 +++++++++++++++++++++++++++++-------- libfuse/lib/fuse_msgbuf.cpp | 4 ++-- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/libfuse/include/objpool.hpp b/libfuse/include/objpool.hpp index db7cdc16..de82ac3d 100644 --- a/libfuse/include/objpool.hpp +++ b/libfuse/include/objpool.hpp @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -117,7 +118,7 @@ private: Node* _pop_node() { - mutex_lock(&_mtx); + mutex_lock(_mtx); Node *node = _head; if(node) @@ -126,7 +127,7 @@ private: _pool_count.fetch_sub(1, std::memory_order_relaxed); } - mutex_unlock(&_mtx); + mutex_unlock(_mtx); return node; } @@ -138,10 +139,9 @@ private: node_->next = _head; _head = node_; + _pool_count.fetch_add(1, std::memory_order_relaxed); mutex_unlock(_mtx); - - _pool_count.fetch_add(1, std::memory_order_relaxed); } public: @@ -154,11 +154,10 @@ public: head = _head; _head = nullptr; + _pool_count.store(0, std::memory_order_relaxed); mutex_unlock(_mtx); - _pool_count.store(0, std::memory_order_relaxed); - while(head) { Node *next = head->next; @@ -169,11 +168,28 @@ public: template T* - alloc(size_t size_ = sizeof(T), Args&&... args_) + alloc(Args&&... args_) + { + return _alloc_impl(sizeof(T), std::forward(args_)...); + } + + template + T* + alloc_size(size_t size_, Args&&... args_) + { + return _alloc_impl(size_, std::forward(args_)...); + } + +private: + template + T* + _alloc_impl(size_t size_, Args&&... args_) { void *mem; Node *node; + assert(size_ >= sizeof(T)); + node = _pop_node(); mem = (node ? static_cast(node) : @@ -191,8 +207,15 @@ public: } } +public: + void + free(T *obj_) noexcept + { + free_size(obj_, sizeof(T)); + } + void - free(T *obj_, size_t size_ = sizeof(T)) noexcept + free_size(T *obj_, size_t size_) noexcept { if(not obj_) return; diff --git a/libfuse/lib/fuse_msgbuf.cpp b/libfuse/lib/fuse_msgbuf.cpp index 76c43668..536e1c98 100644 --- a/libfuse/lib/fuse_msgbuf.cpp +++ b/libfuse/lib/fuse_msgbuf.cpp @@ -103,7 +103,7 @@ _msgbuf_alloc(msgbuf_setup_func_t setup_func_) { fuse_msgbuf_t *msgbuf; - msgbuf = g_msgbuf_pool.alloc(g_bufsize); + msgbuf = g_msgbuf_pool.alloc_size(g_bufsize); if(msgbuf == NULL) return NULL; @@ -127,7 +127,7 @@ msgbuf_alloc_page_aligned() void msgbuf_free(fuse_msgbuf_t *msgbuf_) { - g_msgbuf_pool.free(msgbuf_, g_bufsize); + g_msgbuf_pool.free_size(msgbuf_,g_bufsize); } u64