I hate segfaults

This commit is contained in:
2025-03-14 23:20:46 -05:00
parent f503c3589e
commit 8ca9d9c4d9
2 changed files with 15 additions and 17 deletions

View File

@@ -41,7 +41,11 @@ void App::run() {
for(auto it = modules.begin(); it != modules.end(); it++) { for(auto it = modules.begin(); it != modules.end(); it++) {
(*it)->run(); (*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) { void App::unload(decltype(Module::self) it) {
toClose.push_back((*it)->getHandle()); void* h = (*it)->getHandle();
std::cout << "marked handle for closure\n"; std::cout << "retrieved handle\nAttempting to delete module: " << (*it)->getName() << std::endl;
std::cout << "Attempting to delete module: " << (*it)->getName() << std::endl; delete *it;
Module* m = *it;
*it = nullptr;
modules.erase(it);
std::cout << "erased iterator\n";
delete m;
std::cout << "deleted module\n"; std::cout << "deleted module\n";
}
void App::closeModules() {
for(auto h : toClose) {
dlclose(h); dlclose(h);
std::cout << "closed handle\n";
} }
toClose.clear();
void App::stopModule(decltype(Module::self) it) {
toClose.push_back(*it);
modules.erase(it);
} }
void App::handleArgs(const int& argc, char* argv[]) { void App::handleArgs(const int& argc, char* argv[]) {

View File

@@ -13,7 +13,7 @@ class App {
bool done = false; bool done = false;
std::list<Module*> modules; std::list<Module*> modules;
std::list<void*> toClose; std::list<Module*> toClose;
public: public:
App(const int&, char*[]); App(const int&, char*[]);
@@ -27,7 +27,7 @@ class App {
void unload(decltype(Module::self)); void unload(decltype(Module::self));
void closeModules(); void stopModule(decltype(Module::self));
void handleArgs(const int&, char*[]); void handleArgs(const int&, char*[]);