set_state (FINISHED_ERROR);
}
- void run ()
+ void run () override
{
while (true) {
if (finished ()) {
return;
}
+ boost::this_thread::interruption_point();
}
}
- string name () const {
+ string name () const override {
return "";
}
- string json_name () const {
+ string json_name () const override {
return "";
}
};
BOOST_CHECK (i == 5 ? jobs[i]->running() : !jobs[i]->running());
}
- for (auto job: jobs) {
- job->set_finished_ok();
+ /* Set any jobs that are started to be finished, until they're all finished */
+ while (true) {
+ if (std::find_if(jobs.begin(), jobs.end(), [](shared_ptr<Job> job) { return !job->finished_ok(); }) == jobs.end()) {
+ break;
+ }
+
+ for (auto job: jobs) {
+ if (job->running()) {
+ job->set_finished_ok();
+ }
+ }
}
+
+ 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());
}