add closure queue
This commit is contained in:
15
src/App.cpp
15
src/App.cpp
@@ -41,6 +41,7 @@ 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();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -76,19 +77,25 @@ void App::load(std::string lib) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void App::unload(decltype(Module::self) it) {
|
void App::unload(decltype(Module::self) it) {
|
||||||
void* handle = (*it)->getHandle();
|
toClose.push_back((*it)->getHandle());
|
||||||
std::cout << "retrieved handle\nAttempting to delete module: " << (*it)->getName() << std::endl;
|
std::cout << "marked handle for closure\n";
|
||||||
|
std::cout << "Attempting to delete module: " << (*it)->getName() << std::endl;
|
||||||
Module* m = *it;
|
Module* m = *it;
|
||||||
*it = nullptr;
|
*it = nullptr;
|
||||||
modules.erase(it);
|
modules.erase(it);
|
||||||
std::cout << "erased iterator\n";
|
std::cout << "erased iterator\n";
|
||||||
delete m;
|
delete m;
|
||||||
std::cout << "deleted module\n";
|
std::cout << "deleted module\n";
|
||||||
dlclose(handle);
|
|
||||||
std::cout << "closed handle\n";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void App::closeModules() {
|
||||||
|
for(auto it = toClose.begin(); it != toClose.end(); it++) {
|
||||||
|
dlclose(*it);
|
||||||
|
it = toClose.erase(it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void App::handleArgs(const int& argc, char* argv[]) {
|
void App::handleArgs(const int& argc, char* argv[]) {
|
||||||
|
|
||||||
int i = 1;
|
int i = 1;
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ class App {
|
|||||||
bool done = false;
|
bool done = false;
|
||||||
|
|
||||||
std::list<Module*> modules;
|
std::list<Module*> modules;
|
||||||
|
std::list<void*> toClose;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
App(const int&, char*[]);
|
App(const int&, char*[]);
|
||||||
@@ -26,6 +27,8 @@ class App {
|
|||||||
|
|
||||||
void unload(decltype(Module::self));
|
void unload(decltype(Module::self));
|
||||||
|
|
||||||
|
void closeModules();
|
||||||
|
|
||||||
void handleArgs(const int&, char*[]);
|
void handleArgs(const int&, char*[]);
|
||||||
|
|
||||||
void printHelp();
|
void printHelp();
|
||||||
|
|||||||
Reference in New Issue
Block a user