diff options
author | ancarola <raffaele.ancarola@epfl.ch> | 2019-01-28 20:30:55 +0100 |
---|---|---|
committer | ancarola <raffaele.ancarola@epfl.ch> | 2019-01-28 20:30:55 +0100 |
commit | eb78dde98c313946381dfabffb5b8cc05c9b388b (patch) | |
tree | f131609dc645ad1f88eb42b9f46194db2ff86387 | |
parent | Channel interface improved (diff) | |
download | flatland-eb78dde98c313946381dfabffb5b8cc05c9b388b.tar.gz flatland-eb78dde98c313946381dfabffb5b8cc05c9b388b.zip |
Listener pre-reconstruction
-rw-r--r-- | engine/flatland.cpp | 3 | ||||
-rw-r--r-- | engine/include/core/signal.hpp | 2 | ||||
-rw-r--r-- | engine/signal.cpp | 11 | ||||
-rw-r--r-- | test/signal_test.cpp | 7 |
4 files changed, 22 insertions, 1 deletions
diff --git a/engine/flatland.cpp b/engine/flatland.cpp index d5a2a46..95af534 100644 --- a/engine/flatland.cpp +++ b/engine/flatland.cpp @@ -213,6 +213,9 @@ int flat::init_flatland(FlatWindow* w, const flat_status& s, float _fps) cout << "Flatland: quitting SDL" << endl; + // finalize core channel + core_chan.finalize(); + SDL_Quit(); return status.error; diff --git a/engine/include/core/signal.hpp b/engine/include/core/signal.hpp index 8496f1e..4a4345c 100644 --- a/engine/include/core/signal.hpp +++ b/engine/include/core/signal.hpp @@ -148,6 +148,8 @@ namespace flat */ bool start(priority_t task_priority = priority_t::none, job * _job = NULL); + void finalize(); + listener::ptr connect(listener::callback f, const std::initializer_list<std::string>& filters = {}); diff --git a/engine/signal.cpp b/engine/signal.cpp index d6be29b..c5b5ad4 100644 --- a/engine/signal.cpp +++ b/engine/signal.cpp @@ -41,6 +41,17 @@ bool channel::start(priority_t prior, job * _job) return true; } +void channel::finalize() +{ + npdebug("Finalizing channel: ", label) + + if (mapped) { + + channels.erase(label); + checker.reset(); + } +} + bool channel::map() { if (!mapped) { diff --git a/test/signal_test.cpp b/test/signal_test.cpp index 35aede5..96bc305 100644 --- a/test/signal_test.cpp +++ b/test/signal_test.cpp @@ -37,7 +37,6 @@ void function_listener(const object*, core::signal::package msg) class c_listener { - listener::ptr lis; public: @@ -115,6 +114,12 @@ int main() npdebug("Deleting m_listener") delete m_listener; + alpha = nullptr; // out of scope + f_listener = nullptr; + + npdebug("alpha use count: ", alpha.use_count()) + npdebug("f_listener use count: ", f_listener.use_count()) + npdebug("Exiting") return 0; |