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)
|
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.libs.clear();
|
||||||
s.rsrc.typeRegistry.clear();
|
s.rsrc.typeRegistry.clear();
|
||||||
|
|
||||||
for (const auto& lib : libs)
|
loadable_lib::LoadableLibraryManager& llm =
|
||||||
{
|
loadable_lib::LoadableLibraryManager::getInstance();
|
||||||
loadable_lib::LoadableLibraryManager::getInstance()
|
for (const auto& loadedLibrary : loadedLibrariesTmp) {
|
||||||
.unloadSharedLibrary(lib->loadedSharedLibrary);
|
llm.unloadSharedLibrary(loadedLibrary);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -224,13 +224,21 @@ void StimBuffApiManager::unloadStimBuffApiLib(const std::string& libraryPath)
|
|||||||
|
|
||||||
void StimBuffApiManager::unloadAllStimBuffApiLibs(void)
|
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();
|
s.rsrc.libs.clear();
|
||||||
|
|
||||||
for (const auto& lib : libs)
|
loadable_lib::LoadableLibraryManager& llm =
|
||||||
{
|
loadable_lib::LoadableLibraryManager::getInstance();
|
||||||
loadable_lib::LoadableLibraryManager::getInstance()
|
for (const auto& loadedLibrary : loadedLibrariesTmp) {
|
||||||
.unloadSharedLibrary(lib->loadedSharedLibrary);
|
llm.unloadSharedLibrary(loadedLibrary);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user