From: Jaroslav Kysela Date: Wed, 30 Dec 2015 19:08:00 +0000 (+0100) Subject: timeshift: fix timeshift_packets_clone X-Git-Tag: v4.2.1~1265 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c5ac0fd30688fa6de8625e2072ffb88ba09e7aa8;p=thirdparty%2Ftvheadend.git timeshift: fix timeshift_packets_clone --- diff --git a/src/timeshift.c b/src/timeshift.c index e4aa79c06..a0e34d32a 100644 --- a/src/timeshift.c +++ b/src/timeshift.c @@ -285,16 +285,23 @@ timeshift_packet( timeshift_t *ts, th_pkt_t *pkt ) void timeshift_packets_clone( timeshift_t *ts, struct streaming_message_queue *dst ) { - streaming_message_t *lowest, *sm; - struct streaming_message_queue *sq, *backlogs; + streaming_message_t *lowest, *sm, *sm2; + struct streaming_message_queue *sq, *sq2, *backlogs; int i; lock_assert(&ts->state_mutex); - /* init temporary queues */ + /* init temporary queues and copy the backlog data */ backlogs = alloca(ts->backlog_max * sizeof(*backlogs)); - for (i = 0; i < ts->backlog_max; i++) - TAILQ_INIT(&backlogs[i]); + for (i = 0; i < ts->backlog_max; i++) { + sq = &backlogs[i]; + sq2 = &ts->backlog[i]; + TAILQ_INIT(sq); + TAILQ_FOREACH(sm, sq2, sm_link) { + sm2 = streaming_msg_clone(sm); + TAILQ_INSERT_TAIL(sq, sm2, sm_link); + } + } /* push to destination (pts sorted) */ while (1) { lowest = NULL;