From 756c2011e4d0bc45d85a6e88184c26c8eaaa8c48 Mon Sep 17 00:00:00 2001 From: Brad Hubbard Date: Sat, 24 Dec 2016 09:23:31 +1000 Subject: [PATCH] tracing: Fix handle leak in TracepointProvider Silences Coverity 1397733 Signed-off-by: Brad Hubbard --- src/common/TracepointProvider.cc | 12 ++++++------ src/common/TracepointProvider.h | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/common/TracepointProvider.cc b/src/common/TracepointProvider.cc index 7c3d453cdc3..92aa4033d6e 100644 --- a/src/common/TracepointProvider.cc +++ b/src/common/TracepointProvider.cc @@ -7,13 +7,16 @@ TracepointProvider::TracepointProvider(CephContext *cct, const char *library, const char *config_key) : m_cct(cct), m_library(library), m_config_keys{config_key, NULL}, - m_lock("TracepointProvider::m_lock"), m_enabled(false) { + m_lock("TracepointProvider::m_lock") { m_cct->_conf->add_observer(this); verify_config(m_cct->_conf); } TracepointProvider::~TracepointProvider() { m_cct->_conf->remove_observer(this); + if (m_handle) { + dlclose(m_handle); + } } void TracepointProvider::handle_conf_change( @@ -25,7 +28,7 @@ void TracepointProvider::handle_conf_change( void TracepointProvider::verify_config(const struct md_config_t *conf) { Mutex::Locker locker(m_lock); - if (m_enabled) { + if (m_handle) { return; } @@ -36,9 +39,6 @@ void TracepointProvider::verify_config(const struct md_config_t *conf) { return; } - void *handle = dlopen(m_library.c_str(), RTLD_NOW); - if (handle != NULL) { - m_enabled = true; - } + m_handle = dlopen(m_library.c_str(), RTLD_NOW); } diff --git a/src/common/TracepointProvider.h b/src/common/TracepointProvider.h index 9f5ec11f3c4..6454f45a8c5 100644 --- a/src/common/TracepointProvider.h +++ b/src/common/TracepointProvider.h @@ -36,7 +36,7 @@ public: } inline bool is_enabled() const { - return tracepoint_provider->m_enabled; + return tracepoint_provider->m_handle != nullptr; } private: TracepointProvider *tracepoint_provider; @@ -75,7 +75,7 @@ private: mutable const char* m_config_keys[2]; Mutex m_lock; - bool m_enabled; + void* m_handle = nullptr; void verify_config(const struct md_config_t *conf); }; -- 2.39.5