summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-09-01 21:00:47 +0100
committerCarl Hetherington <cth@carlh.net>2015-09-01 21:00:47 +0100
commit1934870acbab5efe51afecff46081a5850876eee (patch)
tree06de9a644914493d454b5842cebc672c0a71d940 /src/lib
parent0df83d7ba261cdbb5be62db34dae7b972e05ddd9 (diff)
Don't start thread in constructor. (JobManager)
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/job_manager.cc13
-rw-r--r--src/lib/job_manager.h1
2 files changed, 12 insertions, 2 deletions
diff --git a/src/lib/job_manager.cc b/src/lib/job_manager.cc
index f31a00a18..e3f91f4fc 100644
--- a/src/lib/job_manager.cc
+++ b/src/lib/job_manager.cc
@@ -38,11 +38,17 @@ JobManager* JobManager::_instance = 0;
JobManager::JobManager ()
: _terminate (false)
, _last_active_jobs (false)
- , _scheduler (new boost::thread (boost::bind (&JobManager::scheduler, this)))
+ , _scheduler (0)
{
}
+void
+JobManager::start ()
+{
+ _scheduler = new boost::thread (boost::bind (&JobManager::scheduler, this));
+}
+
JobManager::~JobManager ()
{
{
@@ -50,9 +56,11 @@ JobManager::~JobManager ()
_terminate = true;
}
- if (_scheduler->joinable ()) {
+ if (_scheduler) {
_scheduler->join ();
}
+
+ delete _scheduler;
}
shared_ptr<Job>
@@ -147,6 +155,7 @@ JobManager::instance ()
{
if (_instance == 0) {
_instance = new JobManager ();
+ _instance->start ();
}
return _instance;
diff --git a/src/lib/job_manager.h b/src/lib/job_manager.h
index d0e83e26f..3cd8be6d6 100644
--- a/src/lib/job_manager.h
+++ b/src/lib/job_manager.h
@@ -55,6 +55,7 @@ private:
JobManager ();
~JobManager ();
void scheduler ();
+ void start ();
mutable boost::mutex _mutex;
std::list<boost::shared_ptr<Job> > _jobs;