summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorancarola <raffaele.ancarola@epfl.ch>2019-01-28 20:30:55 +0100
committerancarola <raffaele.ancarola@epfl.ch>2019-01-28 20:30:55 +0100
commiteb78dde98c313946381dfabffb5b8cc05c9b388b (patch)
treef131609dc645ad1f88eb42b9f46194db2ff86387
parentChannel interface improved (diff)
downloadflatland-eb78dde98c313946381dfabffb5b8cc05c9b388b.tar.gz
flatland-eb78dde98c313946381dfabffb5b8cc05c9b388b.zip
Listener pre-reconstruction
-rw-r--r--engine/flatland.cpp3
-rw-r--r--engine/include/core/signal.hpp2
-rw-r--r--engine/signal.cpp11
-rw-r--r--test/signal_test.cpp7
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;