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) 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);
} }
} }
+13 -5
View File
@@ -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);
} }
} }