diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-08-16 01:38:28 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-08-16 01:38:36 +0200 |
| commit | bdf9625b0a7f210ff967c8bfe3ae3ee43a43c64a (patch) | |
| tree | 159aac7761c4c4d3f3c0fbc80abc524ba00baff8 /src/tools | |
| parent | e03f50c7d9c3d286fc60716c5d4bb913c2c1e0af (diff) | |
Fix deadlock on cancelling jobs.v2.16.21
Diffstat (limited to 'src/tools')
| -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 (); |
