From 06959faf429d1118e16e71900148c1ba16118be4 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 24 Apr 2015 22:26:13 +0100 Subject: [PATCH] Fix crash due to static initialisation order nastiness. --- src/lib/writer.cc | 16 ++++++++++------ src/lib/writer.h | 8 ++++---- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/lib/writer.cc b/src/lib/writer.cc index 4270a42a7..8d73b3126 100644 --- a/src/lib/writer.cc +++ b/src/lib/writer.cc @@ -71,8 +71,6 @@ using boost::shared_ptr; using boost::weak_ptr; using boost::dynamic_pointer_cast; -int const Writer::_maximum_frames_in_memory = Config::instance()->num_local_encoding_threads() + 4; - Writer::Writer (shared_ptr f, weak_ptr j) : _film (f) , _job (j) @@ -151,7 +149,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) { + while (_queued_full_in_memory > maximum_frames_in_memory ()) { /* The queue is too big; wait until that is sorted out */ _full_condition.wait (lock); } @@ -184,7 +182,7 @@ Writer::fake_write (int frame, Eyes eyes) { boost::mutex::scoped_lock lock (_mutex); - while (_queued_full_in_memory > _maximum_frames_in_memory) { + while (_queued_full_in_memory > maximum_frames_in_memory ()) { /* The queue is too big; wait until that is sorted out */ _full_condition.wait (lock); } @@ -266,7 +264,7 @@ try while (true) { - if (_finish || _queued_full_in_memory > _maximum_frames_in_memory || have_sequenced_image_at_queue_head ()) { + 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; } @@ -352,7 +350,7 @@ try } } - while (_queued_full_in_memory > _maximum_frames_in_memory) { + while (_queued_full_in_memory > maximum_frames_in_memory ()) { done_something = true; /* Too many frames in memory which can't yet be written to the stream. Write some FULL frames to disk. @@ -685,3 +683,9 @@ operator== (QueueItem const & a, QueueItem const & b) { return a.frame == b.frame && a.eyes == b.eyes; } + +int +Writer::maximum_frames_in_memory () const +{ + return Config::instance()->num_local_encoding_threads() + 4; +} diff --git a/src/lib/writer.h b/src/lib/writer.h index 6aa0f4c1f..68ac972ee 100644 --- a/src/lib/writer.h +++ b/src/lib/writer.h @@ -107,6 +107,10 @@ private: void check_existing_picture_mxf (); bool check_existing_picture_mxf_frame (FILE *, int, Eyes); bool have_sequenced_image_at_queue_head (); + /** maximum number of frames to hold in memory, for when we are managing + * ordering + */ + int maximum_frames_in_memory () const; /** our Film */ boost::shared_ptr _film; @@ -133,10 +137,6 @@ private: /** the index of the last written frame */ int _last_written_frame; Eyes _last_written_eyes; - /** maximum number of frames to hold in memory, for when we are managing - ordering - */ - static const int _maximum_frames_in_memory; /** number of FULL written frames */ int _full_written; -- 2.30.2