ApiMgrs: fix segfault from use-after-free

This commit is contained in:
2026-06-10 22:44:53 -04:00
parent 82b99e680c
commit d118181766
2 changed files with 26 additions and 10 deletions
@@ -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);
}
}
+13 -5
View File
@@ -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);
}
}