+2015-09-02 c.hetherington <cth@carlh.net>
+
+ * Fix problems when changing the number
+ of encoding servers / threads during an
+ encode (#683).
+
2015-09-02 Carl Hetherington <cth@carlh.net>
* Version 2.1.50 released.
, _video_frames_enqueued (0)
, _left_done (false)
, _right_done (false)
- , _terminate (false)
+ , _terminate_enqueue (false)
+ , _terminate_encoding (false)
, _writer (writer)
{
servers_list_changed ();
Encoder::~Encoder ()
{
terminate_threads ();
+
+ boost::mutex::scoped_lock lm (_queue_mutex);
+ _terminate_enqueue = true;
+ _full_condition.notify_all ();
+ _empty_condition.notify_all ();
}
void
/* XXX: discard 3D here if required */
/* Wait until the queue has gone down a bit */
- while (_queue.size() >= threads * 2 && !_terminate) {
+ while (_queue.size() >= threads * 2 && !_terminate_enqueue) {
LOG_TIMING ("decoder-sleep queue=%1", _queue.size());
_full_condition.wait (queue_lock);
LOG_TIMING ("decoder-wake queue=%1", _queue.size());
}
- if (_terminate) {
+ if (_terminate_enqueue) {
return;
}
{
{
boost::mutex::scoped_lock queue_lock (_queue_mutex);
- _terminate = true;
+ _terminate_encoding = true;
_full_condition.notify_all ();
_empty_condition.notify_all ();
}
}
_threads.clear ();
- _terminate = false;
+ _terminate_encoding = false;
}
void
LOG_TIMING ("encoder-sleep thread=%1", boost::this_thread::get_id());
boost::mutex::scoped_lock lock (_queue_mutex);
- while (_queue.empty () && !_terminate) {
+ while (_queue.empty () && !_terminate_encoding) {
_empty_condition.wait (lock);
}
- if (_terminate) {
+ if (_terminate_encoding) {
return;
}
bool _right_done;
/* XXX: probably should be atomic */
- bool _terminate;
+ bool _terminate_enqueue;
+ bool _terminate_encoding;
/** Mutex for _threads */
mutable boost::mutex _threads_mutex;
std::list<boost::thread *> _threads;