summaryrefslogtreecommitdiffstats
path: root/parameter/SystemClass.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'parameter/SystemClass.cpp')
-rw-r--r--parameter/SystemClass.cpp26
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);
-}