X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fwriter.cc;h=33817ca6eb8b6479b6eedec4539bae54c2faed91;hb=74fe68e5895654e27a7cf8097917c1e95fa89519;hp=580dfe4f21d19e0bfb452a37d32e413ad247d6b5;hpb=04533b9cf34ce8089113015715083ee9c5b2b001;p=dcpomatic.git diff --git a/src/lib/writer.cc b/src/lib/writer.cc index 580dfe4f2..33817ca6e 100644 --- a/src/lib/writer.cc +++ b/src/lib/writer.cc @@ -139,6 +139,7 @@ Writer::write (shared_ptr encoded, int frame, Eyes eyes) boost::mutex::scoped_lock lock (_mutex); while (_queued_full_in_memory > _maximum_frames_in_memory) { + /* The queue is too big; wait until that is sorted out */ _full_condition.wait (lock); } @@ -160,7 +161,8 @@ Writer::write (shared_ptr encoded, int frame, Eyes eyes) _queue.push_back (qi); ++_queued_full_in_memory; } - + + /* Now there's something to do: wake anything wait()ing on _empty_condition */ _empty_condition.notify_all (); } @@ -170,6 +172,7 @@ Writer::fake_write (int frame, Eyes eyes) boost::mutex::scoped_lock lock (_mutex); while (_queued_full_in_memory > _maximum_frames_in_memory) { + /* The queue is too big; wait until that is sorted out */ _full_condition.wait (lock); } @@ -191,6 +194,7 @@ Writer::fake_write (int frame, Eyes eyes) _queue.push_back (qi); } + /* Now there's something to do: wake anything wait()ing on _empty_condition */ _empty_condition.notify_all (); } @@ -244,9 +248,11 @@ try while (1) { if (_finish || _queued_full_in_memory > _maximum_frames_in_memory || have_sequenced_image_at_queue_head ()) { + /* We've got something to do: go and do it */ break; } + /* Nothing to do: wait until something happens which may indicate that we do */ LOG_TIMING (N_("writer sleeps with a queue of %1"), _queue.size()); _empty_condition.wait (lock); LOG_TIMING (N_("writer wakes with a queue of %1"), _queue.size()); @@ -336,6 +342,7 @@ try --_queued_full_in_memory; } + /* The queue has probably just gone down a bit; notify anything wait()ing on _full_condition */ _full_condition.notify_all (); } }