From b010bf3a39efe65db2251fbbf2640b2d9e539200 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 2 Sep 2015 17:03:50 +0100 Subject: Don't share _terminate. _terminate was being shared between enqueue() and the encoding threads so that when terminating and recreating the encoding threads any pending enqueue() was dropped (#683). --- src/lib/encoder.cc | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'src/lib/encoder.cc') diff --git a/src/lib/encoder.cc b/src/lib/encoder.cc index 00e28e1eb..06fc81ad7 100644 --- a/src/lib/encoder.cc +++ b/src/lib/encoder.cc @@ -61,7 +61,8 @@ Encoder::Encoder (shared_ptr film, weak_ptr j, shared_ptr film, weak_ptr j, shared_ptr pv) /* 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; } @@ -256,7 +262,7 @@ Encoder::terminate_threads () { { boost::mutex::scoped_lock queue_lock (_queue_mutex); - _terminate = true; + _terminate_encoding = true; _full_condition.notify_all (); _empty_condition.notify_all (); } @@ -271,7 +277,7 @@ Encoder::terminate_threads () } _threads.clear (); - _terminate = false; + _terminate_encoding = false; } void @@ -294,11 +300,11 @@ try 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; } -- cgit v1.2.3