Don't start thread in constructor. (JobManager)
authorCarl Hetherington <cth@carlh.net>
Tue, 1 Sep 2015 20:00:47 +0000 (21:00 +0100)
committerCarl Hetherington <cth@carlh.net>
Tue, 1 Sep 2015 20:00:47 +0000 (21:00 +0100)
src/lib/job_manager.cc
src/lib/job_manager.h

index f31a00a18b33f0bce674f0406b06197f8fbea691..e3f91f4fcf22dde2721e9c100d7e1a0e8c379dbf 100644 (file)
@@ -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;
index d0e83e26f6c13b369ba524d421c6bcd72d25e7b5..3cd8be6d67e21207caaeb86cb25d57943ac87b57 100644 (file)
@@ -55,6 +55,7 @@ private:
        JobManager ();
        ~JobManager ();
        void scheduler ();
+       void start ();
 
        mutable boost::mutex _mutex;
        std::list<boost::shared_ptr<Job> > _jobs;