MXS-2612 Ensure that destructor order does not matter
The new configuration system relieas upon static varibles being used for declaring what arguments a particular module uses. To ensure that the destruction order does not matter, we redundantly store the needed data (the name).
This commit is contained in:
@ -381,11 +381,12 @@ void Configuration::insert(Type* pValue)
|
||||
m_values.insert(make_pair(pValue->parameter().name(), pValue));
|
||||
}
|
||||
|
||||
void Configuration::remove(Type* pValue)
|
||||
void Configuration::remove(Type* pValue, const std::string& name)
|
||||
{
|
||||
auto it = m_values.find(pValue->parameter().name());
|
||||
auto it = m_values.find(name);
|
||||
|
||||
mxb_assert(it != m_values.end());
|
||||
mxb_assert(it->second == pValue);
|
||||
m_values.erase(it);
|
||||
}
|
||||
|
||||
@ -405,13 +406,16 @@ size_t Configuration::size() const
|
||||
Type::Type(Configuration* pConfiguration, const config::Param* pParam)
|
||||
: m_configuration(*pConfiguration)
|
||||
, m_param(*pParam)
|
||||
, m_name(pParam->name())
|
||||
{
|
||||
// The name is copied, so that we have access to it in the destructor
|
||||
// also in the case that Param happens to be destructed first.
|
||||
m_configuration.insert(this);
|
||||
}
|
||||
|
||||
Type::~Type()
|
||||
{
|
||||
m_configuration.remove(this);
|
||||
m_configuration.remove(this, m_name);
|
||||
}
|
||||
|
||||
const config::Param& Type::parameter() const
|
||||
|
||||
Reference in New Issue
Block a user