From 8ca9d9c4d96ceb9b025e912576174147ee10683d Mon Sep 17 00:00:00 2001 From: Nathan Date: Fri, 14 Mar 2025 23:20:46 -0500 Subject: [PATCH] I hate segfaults --- src/App.cpp | 28 +++++++++++++--------------- src/App.h | 4 ++-- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/App.cpp b/src/App.cpp index eca30d1..f95f052 100644 --- a/src/App.cpp +++ b/src/App.cpp @@ -41,7 +41,11 @@ void App::run() { for(auto it = modules.begin(); it != modules.end(); it++) { (*it)->run(); } - closeModules(); + + for(auto it = toClose.begin(); it != modules.end(); it++) { + unload(it); + } + toClose.clear(); } } @@ -77,23 +81,17 @@ void App::load(std::string lib) { } void App::unload(decltype(Module::self) it) { - toClose.push_back((*it)->getHandle()); - std::cout << "marked handle for closure\n"; - std::cout << "Attempting to delete module: " << (*it)->getName() << std::endl; - Module* m = *it; - *it = nullptr; - modules.erase(it); - std::cout << "erased iterator\n"; - delete m; + void* h = (*it)->getHandle(); + std::cout << "retrieved handle\nAttempting to delete module: " << (*it)->getName() << std::endl; + delete *it; std::cout << "deleted module\n"; - + dlclose(h); + std::cout << "closed handle\n"; } -void App::closeModules() { - for(auto h : toClose) { - dlclose(h); - } - toClose.clear(); +void App::stopModule(decltype(Module::self) it) { + toClose.push_back(*it); + modules.erase(it); } void App::handleArgs(const int& argc, char* argv[]) { diff --git a/src/App.h b/src/App.h index 3d620b4..cc07b06 100644 --- a/src/App.h +++ b/src/App.h @@ -13,7 +13,7 @@ class App { bool done = false; std::list modules; - std::list toClose; + std::list toClose; public: App(const int&, char*[]); @@ -27,7 +27,7 @@ class App { void unload(decltype(Module::self)); - void closeModules(); + void stopModule(decltype(Module::self)); void handleArgs(const int&, char*[]);