summaryrefslogtreecommitdiff
path: root/src/tools/dcpomatic.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/dcpomatic.cc')
-rw-r--r--src/tools/dcpomatic.cc11
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 ();