diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/encoder.cc | 20 | ||||
| -rw-r--r-- | src/lib/encoder.h | 3 |
2 files changed, 15 insertions, 8 deletions
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<const Film> film, weak_ptr<Job> j, shared_ptr<Write , _video_frames_enqueued (0) , _left_done (false) , _right_done (false) - , _terminate (false) + , _terminate_enqueue (false) + , _terminate_encoding (false) , _writer (writer) { servers_list_changed (); @@ -70,6 +71,11 @@ Encoder::Encoder (shared_ptr<const Film> film, weak_ptr<Job> j, shared_ptr<Write Encoder::~Encoder () { terminate_threads (); + + boost::mutex::scoped_lock lm (_queue_mutex); + _terminate_enqueue = true; + _full_condition.notify_all (); + _empty_condition.notify_all (); } void @@ -183,13 +189,13 @@ Encoder::enqueue (shared_ptr<PlayerVideo> 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; } diff --git a/src/lib/encoder.h b/src/lib/encoder.h index caadda591..76c87a9f7 100644 --- a/src/lib/encoder.h +++ b/src/lib/encoder.h @@ -96,7 +96,8 @@ private: 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; |
