diff options
Diffstat (limited to 'src/tools/dcpomatic.cc')
| -rw-r--r-- | src/tools/dcpomatic.cc | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 6f55b1771..57fad5a0a 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -372,7 +372,7 @@ public: _film_editor->content_panel()->SelectionChanged.connect (boost::bind (&DOMFrame::set_menu_sensitivity, this)); set_title (); - JobManager::instance()->ActiveJobsChanged.connect (boost::bind (&DOMFrame::set_menu_sensitivity, this)); + JobManager::instance()->ActiveJobsChanged.connect(boost::bind(&DOMFrame::active_jobs_changed, this)); overall_panel->SetSizer (main_sizer); @@ -1200,6 +1200,15 @@ private: ev.Skip (); } + void active_jobs_changed() + { + /* ActiveJobsChanged can be called while JobManager holds a lock on its mutex, making + * the call to JobManager::get() in set_menu_sensitivity() deadlock unless we work around + * it by using an idle callback. This feels quite unpleasant. + */ + signal_manager->when_idle(boost::bind(&DOMFrame::set_menu_sensitivity, this)); + } + void set_menu_sensitivity () { auto jobs = JobManager::instance()->get (); |
