From f61acf7791b17d446f8953ca261092d4fb878d37 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 20 Apr 2021 12:26:06 +0200 Subject: [PATCH] Tidy up/fix Hints thread in a couple of ways: - catch all exceptions from anywhere in the thread, rather than just from parts of it - stop the thread immediately when _stop is set to true; we don't care about the results so there's no point carrying on --- src/lib/hints.cc | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/src/lib/hints.cc b/src/lib/hints.cc index e767c07fe..b23f32238 100644 --- a/src/lib/hints.cc +++ b/src/lib/hints.cc @@ -368,6 +368,7 @@ Hints::check_out_of_range_markers () void Hints::thread () +try { auto film = _film.lock (); if (!film) { @@ -411,21 +412,17 @@ Hints::thread () struct timeval last_pulse; gettimeofday (&last_pulse, 0); - try { - while (!player->pass()) { + while (!player->pass()) { - struct timeval now; - gettimeofday (&now, 0); - if ((seconds(now) - seconds(last_pulse)) > 1) { - if (_stop) { - break; - } - emit (bind (boost::ref(Pulse))); - last_pulse = now; + struct timeval now; + gettimeofday (&now, 0); + if ((seconds(now) - seconds(last_pulse)) > 1) { + if (_stop) { + return; } + emit (bind (boost::ref(Pulse))); + last_pulse = now; } - } catch (...) { - store_current (); } if (!check_loudness_done) { @@ -449,13 +446,7 @@ Hints::thread () boost::filesystem::path dcp_dir = film->dir("hints") / dcpomatic::get_process_id(); boost::filesystem::remove_all (dcp_dir); - try { - _writer->finish (film->dir("hints") / dcpomatic::get_process_id()); - } catch (...) { - store_current (); - emit (bind(boost::ref(Finished))); - return; - } + _writer->finish (film->dir("hints") / dcpomatic::get_process_id()); dcp::DCP dcp (dcp_dir); dcp.read (); @@ -489,6 +480,14 @@ Hints::thread () emit (bind(boost::ref(Finished))); } +catch (boost::thread_interrupted) +{ + /* The Hints object is being destroyed before it has finished, so just give up */ +} +catch (...) +{ + store_current (); +} void Hints::hint (string h) -- 2.30.2