summaryrefslogtreecommitdiff
path: root/src/lib/j2k_encoder.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-01-30 22:54:38 +0100
committerCarl Hetherington <cth@carlh.net>2020-01-30 22:54:38 +0100
commitea6b2dae46caa1da829fbf499e83cd6ae3b3773a (patch)
treef8f978b762fad664a4c8d5fdc11d8c7145ee09a8 /src/lib/j2k_encoder.cc
parenta1546fb6c4e59621d99271b8ca996e96a574f7b3 (diff)
Various thread cleanups.
Diffstat (limited to 'src/lib/j2k_encoder.cc')
-rw-r--r--src/lib/j2k_encoder.cc21
1 files changed, 7 insertions, 14 deletions
diff --git a/src/lib/j2k_encoder.cc b/src/lib/j2k_encoder.cc
index 5c3fd477e..96b5b86e7 100644
--- a/src/lib/j2k_encoder.cc
+++ b/src/lib/j2k_encoder.cc
@@ -250,23 +250,17 @@ J2KEncoder::terminate_threads ()
boost::mutex::scoped_lock threads_lock (_threads_mutex);
int n = 0;
- for (list<boost::thread *>::iterator i = _threads.begin(); i != _threads.end(); ++i) {
+ for (list<boost::thread>::iterator i = _threads.begin(); i != _threads.end(); ++i) {
/* 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 ();
- if (!(*i)->joinable()) {
- LOG_ERROR_NC ("About to join() a non-joinable thread");
- }
+ i->interrupt ();
try {
- (*i)->join ();
- } catch (boost::thread_interrupted& e) {
- /* This is to be expected (I think?) */
+ i->join ();
} catch (exception& e) {
LOG_ERROR ("join() threw an exception: %1", e.what());
} catch (...) {
LOG_ERROR_NC ("join() threw an exception");
}
- delete *i;
LOG_GENERAL_NC ("Thread terminated");
++n;
}
@@ -402,14 +396,13 @@ J2KEncoder::servers_list_changed ()
if (!Config::instance()->only_servers_encode ()) {
for (int i = 0; i < Config::instance()->master_encoding_threads (); ++i) {
- boost::thread* t = new boost::thread (boost::bind (&J2KEncoder::encoder_thread, this, optional<EncodeServerDescription> ()));
+ _threads.push_back (boost::thread(boost::bind(&J2KEncoder::encoder_thread, this, optional<EncodeServerDescription>())));
#ifdef DCPOMATIC_LINUX
- pthread_setname_np (t->native_handle(), "encode-worker");
+ pthread_setname_np (_threads.back().native_handle(), "encode-worker");
#endif
- _threads.push_back (t);
#ifdef BOOST_THREAD_PLATFORM_WIN32
if (windows_xp) {
- SetThreadAffinityMask (t->native_handle(), 1 << i);
+ SetThreadAffinityMask (_threads.back().native_handle(), 1 << i);
}
#endif
}
@@ -422,7 +415,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 (new boost::thread (boost::bind (&J2KEncoder::encoder_thread, this, i)));
+ _threads.push_back (boost::thread(boost::bind(&J2KEncoder::encoder_thread, this, i)));
}
}