]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
tracing: Fix handle leak in TracepointProvider 12652/head
authorBrad Hubbard <bhubbard@redhat.com>
Fri, 23 Dec 2016 23:23:31 +0000 (09:23 +1000)
committerBrad Hubbard <bhubbard@redhat.com>
Fri, 30 Dec 2016 00:04:11 +0000 (10:04 +1000)
Silences Coverity 1397733

Signed-off-by: Brad Hubbard <bhubbard@redhat.com>
src/common/TracepointProvider.cc
src/common/TracepointProvider.h

index 7c3d453cdc329926dfe60489063967ef9d843b4e..92aa4033d6e8b35fcb23508a48e57aad5576f195 100644 (file)
@@ -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);
 }
 
index 9f5ec11f3c43b24768bc32deb18f8d774fe35241..6454f45a8c54d117725d20fc052d6e522282afb9 100644 (file)
@@ -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);
 };