From: Brad Hubbard Date: Fri, 23 Dec 2016 23:23:31 +0000 (+1000) Subject: tracing: Fix handle leak in TracepointProvider X-Git-Tag: v12.0.0~332^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F12652%2Fhead;p=ceph.git tracing: Fix handle leak in TracepointProvider Silences Coverity 1397733 Signed-off-by: Brad Hubbard --- diff --git a/src/common/TracepointProvider.cc b/src/common/TracepointProvider.cc index 7c3d453cdc32..92aa4033d6e8 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 9f5ec11f3c43..6454f45a8c54 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); };