From 30d59d4458ba347e9a3ad198e8fd2f611490ce11 Mon Sep 17 00:00:00 2001 From: Antonio SJ Musumeci Date: Wed, 13 May 2026 18:30:40 -0500 Subject: [PATCH] Use shared_mutex for fuse log config - Guard fuse_cfg_t log file and filepath shared pointers with a shared mutex - Replace atomic shared pointer loads and stores with shared and unique locks --- vendored/libfuse/include/fuse_cfg.hpp | 2 ++ vendored/libfuse/lib/fuse_cfg.cpp | 20 +++++++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/vendored/libfuse/include/fuse_cfg.hpp b/vendored/libfuse/include/fuse_cfg.hpp index cdd9d00e..72f3edfb 100644 --- a/vendored/libfuse/include/fuse_cfg.hpp +++ b/vendored/libfuse/include/fuse_cfg.hpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #define FUSE_CFG_INVALID_ID -1 @@ -33,6 +34,7 @@ struct fuse_cfg_t std::shared_ptr log_filepath() const; void log_filepath(const std::string &); private: + mutable std::shared_mutex _log_mutex; std::shared_ptr _log_file = sp(stderr,[](FILE*){}); std::shared_ptr _log_filepath = sp(); diff --git a/vendored/libfuse/lib/fuse_cfg.cpp b/vendored/libfuse/lib/fuse_cfg.cpp index 574793f7..eb1e9e1b 100644 --- a/vendored/libfuse/lib/fuse_cfg.cpp +++ b/vendored/libfuse/lib/fuse_cfg.cpp @@ -1,5 +1,7 @@ #include "fuse_cfg.hpp" +#include + fuse_cfg_t fuse_cfg; bool @@ -23,24 +25,32 @@ fuse_cfg_t::valid_umask() const std::shared_ptr fuse_cfg_t::log_file() const { - return std::atomic_load(&_log_file); + std::shared_lock lk(_log_mutex); + + return _log_file; } void fuse_cfg_t::log_file(std::shared_ptr f_) { - std::atomic_store(&_log_file, f_); + std::unique_lock lk(_log_mutex); + + _log_file = std::move(f_); } std::shared_ptr fuse_cfg_t::log_filepath() const { - return std::atomic_load(&_log_filepath); + std::shared_lock lk(_log_mutex); + + return _log_filepath; } void fuse_cfg_t::log_filepath(const std::string &s_) { - std::atomic_store(&_log_filepath, - std::make_shared(s_)); + auto filepath = std::make_shared(s_); + std::unique_lock lk(_log_mutex); + + _log_filepath = std::move(filepath); }