From 7ff0cea6af88b31acf1975ad6f1f47ad5ac109c2 Mon Sep 17 00:00:00 2001 From: Helge Norberg Date: Tue, 31 Jan 2017 10:11:23 +0100 Subject: [PATCH] [layer_producer] Fixed serious bug where a circular reference of layer producers caused a stack overflow and server crash --- CHANGELOG | 3 +++ modules/reroute/producer/layer_producer.cpp | 13 +++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 630a12148..765a1c5d1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -51,6 +51,9 @@ Producers + Fixed bug where only URL:s with . in them where recognized. o Image producer: + Added LENGTH parameter to allow for queueing with LOADBG AUTO. + o Layer producer: + + Fixed serious bug where a circular reference of layer producers caused a + stack overflow and server crash. Mixer ----- diff --git a/modules/reroute/producer/layer_producer.cpp b/modules/reroute/producer/layer_producer.cpp index 53a9b40c3..9b5bad96c 100644 --- a/modules/reroute/producer/layer_producer.cpp +++ b/modules/reroute/producer/layer_producer.cpp @@ -41,7 +41,7 @@ namespace caspar { namespace reroute { class layer_consumer : public core::write_frame_consumer -{ +{ tbb::concurrent_bounded_queue frame_buffer_; semaphore frames_available_ { 0 }; int frames_delay_; @@ -108,7 +108,7 @@ public: : layer_(layer) , consumer_(spl::make_shared(frames_delay)) , channel_(channel) - , last_frame_(core::draw_frame::empty()) + , last_frame_(core::draw_frame::late()) , frame_number_(0) { pixel_constraints_.width.set(channel->video_format_desc().width); @@ -125,7 +125,7 @@ public: } // frame_producer - + core::draw_frame receive_impl() override { auto consumer_frame = consumer_->receive(); @@ -134,7 +134,12 @@ public: frame_number_++; return last_frame_ = consumer_frame; - } + } + + core::draw_frame last_frame() override + { + return last_frame_; + } std::wstring print() const override { -- 2.39.2