ApiMgrs: fix segfault from use-after-free
This commit is contained in:
@@ -108,14 +108,22 @@ void ComparatorApiManager::unloadComparatorLib(const std::string& libraryPath)
|
||||
|
||||
void ComparatorApiManager::unloadAllComparatorLibs(void)
|
||||
{
|
||||
auto libs = s.rsrc.libs;
|
||||
std::vector<std::shared_ptr<
|
||||
loadable_lib::LoadableLibraryManager::LoadedSharedLibrary>>
|
||||
loadedLibrariesTmp;
|
||||
loadedLibrariesTmp.reserve(s.rsrc.libs.size());
|
||||
|
||||
for (const auto& lib : s.rsrc.libs) {
|
||||
loadedLibrariesTmp.push_back(lib->loadedSharedLibrary);
|
||||
}
|
||||
|
||||
s.rsrc.libs.clear();
|
||||
s.rsrc.typeRegistry.clear();
|
||||
|
||||
for (const auto& lib : libs)
|
||||
{
|
||||
loadable_lib::LoadableLibraryManager::getInstance()
|
||||
.unloadSharedLibrary(lib->loadedSharedLibrary);
|
||||
loadable_lib::LoadableLibraryManager& llm =
|
||||
loadable_lib::LoadableLibraryManager::getInstance();
|
||||
for (const auto& loadedLibrary : loadedLibrariesTmp) {
|
||||
llm.unloadSharedLibrary(loadedLibrary);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -224,13 +224,21 @@ void StimBuffApiManager::unloadStimBuffApiLib(const std::string& libraryPath)
|
||||
|
||||
void StimBuffApiManager::unloadAllStimBuffApiLibs(void)
|
||||
{
|
||||
auto libs = s.rsrc.libs;
|
||||
std::vector<std::shared_ptr<
|
||||
loadable_lib::LoadableLibraryManager::LoadedSharedLibrary>>
|
||||
loadedLibrariesTmp;
|
||||
loadedLibrariesTmp.reserve(s.rsrc.libs.size());
|
||||
|
||||
for (const auto& lib : s.rsrc.libs) {
|
||||
loadedLibrariesTmp.push_back(lib->loadedSharedLibrary);
|
||||
}
|
||||
|
||||
s.rsrc.libs.clear();
|
||||
|
||||
for (const auto& lib : libs)
|
||||
{
|
||||
loadable_lib::LoadableLibraryManager::getInstance()
|
||||
.unloadSharedLibrary(lib->loadedSharedLibrary);
|
||||
loadable_lib::LoadableLibraryManager& llm =
|
||||
loadable_lib::LoadableLibraryManager::getInstance();
|
||||
for (const auto& loadedLibrary : loadedLibrariesTmp) {
|
||||
llm.unloadSharedLibrary(loadedLibrary);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user