diff options
Diffstat (limited to 'parameter/SystemClass.cpp')
-rw-r--r-- | parameter/SystemClass.cpp | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/parameter/SystemClass.cpp b/parameter/SystemClass.cpp index effc573..334772a 100644 --- a/parameter/SystemClass.cpp +++ b/parameter/SystemClass.cpp @@ -71,11 +71,16 @@ CSystemClass::~CSystemClass() { delete _pSubsystemLibrary; - // Close all previously opened libraries - while (!_subsystemLibraries.empty()) - { - dlclose(_subsystemLibraries.back()); - _subsystemLibraries.pop_back(); + // Destroy child subsystems *before* unloading the libraries (otherwise crashes will occur + // as unmapped code will be referenced) + clean(); + + // Close all previously opened subsystem libraries + list<void*>::const_iterator it; + + for (it = _subsystemLibraryHandleList.begin(); it != _subsystemLibraryHandleList.end(); ++it) { + + dlclose(*it); } } @@ -238,7 +243,7 @@ bool CSystemClass::loadPlugins(list<string>& lstrPluginFiles, list<string>& lstr } // Store libraries handles - _subsystemLibraries.push_back(lib_handle); + _subsystemLibraryHandleList.push_back(lib_handle); // Get plugin symbol string strPluginSymbol = getPluginSymbol(strPluginFileName); @@ -309,12 +314,3 @@ bool CSystemClass::init(string& strError) { return base::init(strError); } - -// From IXmlSource -void CSystemClass::toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const -{ - // Set the name of system class - xmlElement.setNameAttribute(getName()); - - base::toXml(xmlElement, serializingContext); -} |