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(
void TracepointProvider::verify_config(const struct md_config_t *conf) {
Mutex::Locker locker(m_lock);
- if (m_enabled) {
+ if (m_handle) {
return;
}
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);
}
}
inline bool is_enabled() const {
- return tracepoint_provider->m_enabled;
+ return tracepoint_provider->m_handle != nullptr;
}
private:
TracepointProvider *tracepoint_provider;
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);
};