X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fj2k_encoder.cc;h=5c3fd477ef16dfeefb63d90bdb13bdbdd156bd0a;hb=5d92e7bf242200c3b3b8a079671b572569d2b198;hp=431a47e6530e8277961ebc1f5ca0a6b7f24c32c2;hpb=c4403784febdbdd42e9c32e67fadb147f11fe566;p=dcpomatic.git diff --git a/src/lib/j2k_encoder.cc b/src/lib/j2k_encoder.cc index 431a47e65..5c3fd477e 100644 --- a/src/lib/j2k_encoder.cc +++ b/src/lib/j2k_encoder.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2015 Carl Hetherington + Copyright (C) 2012-2019 Carl Hetherington This file is part of DCP-o-matic. @@ -44,6 +44,7 @@ using std::list; using std::cout; +using std::exception; using boost::shared_ptr; using boost::weak_ptr; using boost::optional; @@ -142,9 +143,9 @@ J2KEncoder::end () } /** @return an estimate of the current number of frames we are encoding per second, - * or 0 if not known. + * if known. */ -float +optional J2KEncoder::current_encoding_rate () const { return _history.rate (); @@ -250,13 +251,20 @@ J2KEncoder::terminate_threads () int n = 0; for (list::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 (); - DCPOMATIC_ASSERT ((*i)->joinable ()); + if (!(*i)->joinable()) { + LOG_ERROR_NC ("About to join() a non-joinable thread"); + } try { (*i)->join (); } catch (boost::thread_interrupted& e) { - /* This is to be expected */ + /* This is to be expected (I think?) */ + } 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");