- shared_ptr<LogicSegment> last_segment =
- dynamic_pointer_cast<LogicSegment>(output_logic->segments().back());
- assert(last_segment);
+
+ vector< shared_ptr<Segment> > segments = output_logic->segments();
+
+ shared_ptr<LogicSegment> last_segment;
+
+ if (!segments.empty())
+ last_segment = dynamic_pointer_cast<LogicSegment>(segments.back());
+ else {
+ // Happens when the data was cleared - all segments are gone then
+ last_segment = make_shared<data::LogicSegment>(
+ *output_logic, 0, (output_logic->num_channels() + 7) / 8, output_logic->get_samplerate());
+ output_logic->push_segment(last_segment);
+ }