]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Fix memory corruption issue
authorAndreas Öman <andreas@lonelycoder.com>
Mon, 14 Jun 2010 18:42:00 +0000 (18:42 +0000)
committerAndreas Öman <andreas@lonelycoder.com>
Mon, 14 Jun 2010 18:42:00 +0000 (18:42 +0000)
src/dvr/dvr_rec.c

index d15adf99bc71000ff79cd0f266d4c92b0bfd26b1..11ba7a247213227e74a5b5cc6b857cbc649813d0 100644 (file)
@@ -448,6 +448,7 @@ dvr_thread(void *aux)
   streaming_queue_t *sq = &de->de_sq;
   streaming_message_t *sm;
   int run = 1;
+  th_pkt_t *pkt;
 
   pthread_mutex_lock(&sq->sq_mutex);
 
@@ -464,9 +465,12 @@ dvr_thread(void *aux)
 
     switch(sm->sm_type) {
     case SMT_PACKET:
-      if(dispatch_clock > de->de_start - (60 * de->de_start_extra))
-       dvr_thread_new_pkt(de, sm->sm_data);
-      pkt_ref_dec(sm->sm_data);
+      pkt = sm->sm_data;
+      if(dispatch_clock > de->de_start - (60 * de->de_start_extra)) {
+       pkt = pkt_merge_global(pkt);
+       dvr_thread_new_pkt(de, pkt);
+      }
+      pkt_ref_dec(pkt);
       break;
 
     case SMT_START:
@@ -594,8 +598,6 @@ dvr_thread_new_pkt(dvr_entry_t *de, th_pkt_t *pkt)
   char txt[100];
   int64_t pts, dts;
 
-  pkt = pkt_merge_global(pkt);
-
   buf = pkt->pkt_payload;
   bufsize = pkt->pkt_payloadlen;
   LIST_FOREACH(drs, &de->de_streams, drs_link)