From 5b1b70c86df7225a2a102bdde3b38ea591a6dcbb Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 19 Feb 2020 21:55:04 +0100 Subject: [PATCH] Can't put boost::thread in a std::list with our macOS compiler. --- src/lib/j2k_encoder.cc | 12 +++++++----- src/lib/j2k_encoder.h | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/lib/j2k_encoder.cc b/src/lib/j2k_encoder.cc index 96b5b86e7..ac420517f 100644 --- a/src/lib/j2k_encoder.cc +++ b/src/lib/j2k_encoder.cc @@ -250,7 +250,7 @@ J2KEncoder::terminate_threads () boost::mutex::scoped_lock threads_lock (_threads_mutex); int n = 0; - for (list::iterator i = _threads.begin(); i != _threads.end(); ++i) { + BOOST_FOREACH (boost::thread* i, _threads) { /* Be careful not to throw in here otherwise _threads will not be clear()ed */ LOG_GENERAL ("Terminating thread %1 of %2", n + 1, _threads.size ()); i->interrupt (); @@ -263,6 +263,7 @@ J2KEncoder::terminate_threads () } LOG_GENERAL_NC ("Thread terminated"); ++n; + delete i; } _threads.clear (); @@ -396,13 +397,14 @@ J2KEncoder::servers_list_changed () if (!Config::instance()->only_servers_encode ()) { for (int i = 0; i < Config::instance()->master_encoding_threads (); ++i) { - _threads.push_back (boost::thread(boost::bind(&J2KEncoder::encoder_thread, this, optional()))); + boost::thread* t = new boost::thread (boost::bind(&J2KEncoder::encoder_thread, this, optional())); #ifdef DCPOMATIC_LINUX - pthread_setname_np (_threads.back().native_handle(), "encode-worker"); + pthread_setname_np (t->native_handle(), "encode-worker"); #endif + _threads.push_back (t); #ifdef BOOST_THREAD_PLATFORM_WIN32 if (windows_xp) { - SetThreadAffinityMask (_threads.back().native_handle(), 1 << i); + SetThreadAffinityMask (t->native_handle(), 1 << i); } #endif } @@ -415,7 +417,7 @@ J2KEncoder::servers_list_changed () LOG_GENERAL (N_("Adding %1 worker threads for remote %2"), i.threads(), i.host_name ()); for (int j = 0; j < i.threads(); ++j) { - _threads.push_back (boost::thread(boost::bind(&J2KEncoder::encoder_thread, this, i))); + _threads.push_back (new boost::thread(boost::bind(&J2KEncoder::encoder_thread, this, i))); } } diff --git a/src/lib/j2k_encoder.h b/src/lib/j2k_encoder.h index b57c4df7e..b4542c40a 100644 --- a/src/lib/j2k_encoder.h +++ b/src/lib/j2k_encoder.h @@ -89,7 +89,7 @@ private: /** Mutex for _threads */ mutable boost::mutex _threads_mutex; - std::list _threads; + std::list _threads; mutable boost::mutex _queue_mutex; std::list > _queue; /** condition to manage thread wakeups when we have nothing to do */ -- 2.30.2