]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
globalheaders (matroska): reorganize refcounting for readability
authorJaroslav Kysela <perex@perex.cz>
Wed, 17 Sep 2014 12:52:56 +0000 (14:52 +0200)
committerJaroslav Kysela <perex@perex.cz>
Wed, 17 Sep 2014 12:53:27 +0000 (14:53 +0200)
src/parsers/parser_avc.c
src/plumbing/globalheaders.c

index e5571470c29e61a0739e557e012cf34595d54eec..bd0b911ed7c826834e7162996bba55ea89e8977b 100644 (file)
@@ -236,6 +236,5 @@ avc_convert_pkt(th_pkt_t *src)
                      pktbuf_len(src->pkt_payload));
   
   pkt->pkt_payload = pktbuf_make(payload.sb_data, payload.sb_ptr);
-  pkt_ref_dec(src);
   return pkt;
 }
index 6e23fbc7da2d88f1554f7069df2f766f252ab178..b5f9ac0067bd4b33bf772a143edf6013b8203eab 100644 (file)
@@ -172,6 +172,7 @@ convertpkt(streaming_start_component_t *ssc, th_pkt_t *pkt)
     return avc_convert_pkt(pkt);
 
   default:
+    pkt_ref_inc(pkt);
     return pkt;
   }
 }
@@ -217,10 +218,9 @@ gh_hold(globalheaders_t *gh, streaming_message_t *sm)
 
     apply_header(ssc, pkt);
 
-    pr = pktref_create(pkt);
-    TAILQ_INSERT_TAIL(&gh->gh_holdq, pr, pr_link);
+    pktref_enqueue(&gh->gh_holdq, pkt);
 
-    free(sm);
+    streaming_msg_free(sm);
 
     if(!headers_complete(gh, gh_queue_delay(gh))) 
       break;
@@ -273,7 +273,7 @@ gh_hold(globalheaders_t *gh, streaming_message_t *sm)
 static void
 gh_pass(globalheaders_t *gh, streaming_message_t *sm)
 {
-  th_pkt_t *pkt;
+  th_pkt_t *pkt, *pkt2;
   streaming_start_component_t *ssc;
 
   switch(sm->sm_type) {
@@ -306,8 +306,10 @@ gh_pass(globalheaders_t *gh, streaming_message_t *sm)
     pkt = sm->sm_data;
     ssc = streaming_start_component_find_by_index(gh->gh_ss, 
                                                  pkt->pkt_componentindex);
-    sm->sm_data = convertpkt(ssc, pkt);
+    sm->sm_data = pkt2 = convertpkt(ssc, pkt);
     streaming_target_deliver2(gh->gh_output, sm);
+    if (pkt == pkt2)
+      pkt_ref_dec(pkt);
     break;
   }
 }