summaryrefslogtreecommitdiffstats
path: root/engine/signal.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engine/signal.cpp')
-rw-r--r--engine/signal.cpp32
1 files changed, 23 insertions, 9 deletions
diff --git a/engine/signal.cpp b/engine/signal.cpp
index 649164a..fbb4e06 100644
--- a/engine/signal.cpp
+++ b/engine/signal.cpp
@@ -20,12 +20,25 @@ channel::~channel()
m_channels.erase(label);
}
-void channel::start(priority_t prior)
+bool channel::start(priority_t prior, job * _job)
{
+ npdebug("Trying to map channel: ", label);
+
+ if (map())
+ m_checker.reset(); // force count to zero, it should remove task too
+ else
+ return false;
+
npdebug("Starting channel: ", label);
+ // take main job if no job is specified
+ if (!_job)
+ _job = &flat::main_job();
+
// Initialize task
- m_checker = flat::main_job().delegate_task(&channel::check_and_call, this, prior);
+ m_checker = _job->delegate_task(&channel::check_and_call, this, prior);
+
+ return true;
}
bool channel::map()
@@ -100,16 +113,17 @@ listener::ptr channel::connect(listener::callback f, const std::initializer_list
return nullptr;
}
-channel::ptr channel::create(const std::string& id, priority_t prior)
+bool channel::legit() const
{
- ptr out = std::make_shared<channel>(id);
-
- if (!out->map())
- return nullptr;
+ return m_mapped;
+}
- out->start(prior);
+channel::ptr channel::create(const std::string& id, priority_t prior, job * _job)
+{
+ ptr out = std::make_shared<channel>(id);
- return out;
+ // do not create a non-legit channel
+ return out->start(prior, _job) ? out : nullptr;
}
channel::ptr channel::find(const std::string& id)