Don't start thread in constructor. (JobManager)
[dcpomatic.git] / src / lib / job_manager.cc
index b5b64a77eccc9d9f000d8512ee3a2101142a059b..e3f91f4fcf22dde2721e9c100d7e1a0e8c379dbf 100644 (file)
@@ -38,9 +38,15 @@ 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>
@@ -64,7 +72,7 @@ JobManager::add (shared_ptr<Job> j)
        }
 
        emit (boost::bind (boost::ref (JobAdded), weak_ptr<Job> (j)));
-       
+
        return j;
 }
 
@@ -98,7 +106,7 @@ JobManager::errors () const
        }
 
        return false;
-}      
+}
 
 void
 JobManager::scheduler ()
@@ -112,21 +120,21 @@ JobManager::scheduler ()
                        if (_terminate) {
                                return;
                        }
-                       
+
                        for (list<shared_ptr<Job> >::iterator i = _jobs.begin(); i != _jobs.end(); ++i) {
 
                                if (!(*i)->finished ()) {
                                        active_jobs = true;
                                }
-                               
+
                                if ((*i)->running ()) {
                                        /* Something is already happening */
                                        break;
                                }
-                               
+
                                if ((*i)->is_new()) {
                                        (*i)->start ();
-                                       
+
                                        /* Only start one job at once */
                                        break;
                                }
@@ -147,6 +155,7 @@ JobManager::instance ()
 {
        if (_instance == 0) {
                _instance = new JobManager ();
+               _instance->start ();
        }
 
        return _instance;