summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-11-26 02:04:25 +0100
committerCarl Hetherington <cth@carlh.net>2020-11-26 02:04:25 +0100
commit82fbf2b9e43fb234f843dc3352fecbd08eeed3f7 (patch)
tree5b3fafea1916eb83d280ee82b2e025bb343b785d /src/lib
parent6bd773e6afc7fb263d68c6859327ab6300032e48 (diff)
It feels unsafe not to lock _threads_mutex between terminate_threads()
and _threads.reset(); move the lock.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/j2k_encoder.cc13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/lib/j2k_encoder.cc b/src/lib/j2k_encoder.cc
index c000f8599..9898ede78 100644
--- a/src/lib/j2k_encoder.cc
+++ b/src/lib/j2k_encoder.cc
@@ -64,6 +64,7 @@ J2KEncoder::J2KEncoder (shared_ptr<const Film> film, shared_ptr<Writer> writer)
J2KEncoder::~J2KEncoder ()
{
+ boost::mutex::scoped_lock lm (_threads_mutex);
terminate_threads ();
}
@@ -107,7 +108,10 @@ J2KEncoder::end ()
LOG_GENERAL_NC (N_("Terminating encoder threads"));
- terminate_threads ();
+ {
+ boost::mutex::scoped_lock lm (_threads_mutex);
+ terminate_threads ();
+ }
/* Something might have been thrown during terminate_threads */
rethrow ();
@@ -240,11 +244,12 @@ J2KEncoder::encode (shared_ptr<PlayerVideo> pv, DCPTime time)
_last_player_video_time = time;
}
+
+/** Caller must hold a lock on _threads_mutex */
void
J2KEncoder::terminate_threads ()
{
boost::this_thread::disable_interruption dis;
- boost::mutex::scoped_lock lm (_threads_mutex);
if (!_threads) {
return;
@@ -372,11 +377,11 @@ catch (...)
void
J2KEncoder::servers_list_changed ()
{
+ boost::mutex::scoped_lock lm (_threads_mutex);
+
terminate_threads ();
_threads.reset (new boost::thread_group());
- boost::mutex::scoped_lock lm (_threads_mutex);
-
/* XXX: could re-use threads */
if (!Config::instance()->only_servers_encode ()) {