diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-08-06 22:57:58 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-08-11 22:40:59 +0200 |
| commit | 1fe717e9125e896c92f281922e87f8158b15c7af (patch) | |
| tree | fff3bdf299150f6339428b60ac30b0a6bcf3531c | |
| parent | 1d3085c403f265fb203654d461c0b77974205f2f (diff) | |
Allow cancellation of un-started jobs (#2777).
| -rw-r--r-- | src/lib/job.cc | 14 | ||||
| -rw-r--r-- | test/job_manager_test.cc | 22 |
2 files changed, 28 insertions, 8 deletions
diff --git a/src/lib/job.cc b/src/lib/job.cc index 5bed3f0d2..8f0a7474f 100644 --- a/src/lib/job.cc +++ b/src/lib/job.cc @@ -589,17 +589,15 @@ Job::remaining_time () const void Job::cancel () { - if (!_thread.joinable()) { - return; - } + if (_thread.joinable()) { + if (paused_by_user() || paused_by_priority()) { + resume (); + } - if (paused_by_user() || paused_by_priority()) { - resume (); + _thread.interrupt (); + _thread.join (); } - _thread.interrupt (); - _thread.join (); - set_state (FINISHED_CANCELLED); } diff --git a/test/job_manager_test.cc b/test/job_manager_test.cc index e11423575..4a2f8bde5 100644 --- a/test/job_manager_test.cc +++ b/test/job_manager_test.cc @@ -65,6 +65,7 @@ public: if (finished ()) { return; } + boost::this_thread::interruption_point(); } } @@ -139,3 +140,24 @@ BOOST_AUTO_TEST_CASE (job_manager_test2) BOOST_REQUIRE (!wait_for_jobs()); } + +BOOST_AUTO_TEST_CASE(cancel_job_test) +{ + shared_ptr<Film> film; + + vector<shared_ptr<TestJob>> jobs; + for (int i = 0; i < 2; ++i) { + auto job = make_shared<TestJob>(film); + jobs.push_back(job); + JobManager::instance()->add(job); + } + + jobs[1]->cancel(); + jobs[0]->cancel(); + + dcpomatic_sleep_seconds(1); + + BOOST_CHECK(jobs[0]->finished_cancelled()); + BOOST_CHECK(jobs[1]->finished_cancelled()); +} + |
