]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
httpc: fix the improper http_client_finish() call for RTP data state, fixes #4964
authorJaroslav Kysela <perex@perex.cz>
Thu, 22 Feb 2018 22:04:12 +0000 (23:04 +0100)
committerJaroslav Kysela <perex@perex.cz>
Thu, 22 Feb 2018 22:04:12 +0000 (23:04 +0100)
src/httpc.c

index 65feef2c5aa119afd90b94c17934f83666b287be..79eb53e1d3bd59473683fc3a8fc5a1c156e8fcd4 100644 (file)
@@ -687,15 +687,9 @@ http_client_finish( http_client_t *hc )
 
   tvhtrace(LS_HTTPC, "%04X: finishing", shortid(hc));
 
-  if (hc->hc_in_rtp_data && hc->hc_rtp_data_complete) {
-    http_client_get(hc);
-    pthread_mutex_unlock(&hc->hc_mutex);
-    res = hc->hc_rtp_data_complete(hc);
-    pthread_mutex_lock(&hc->hc_mutex);
-    http_client_put(hc);
-    if (res < 0)
-      return http_client_flush(hc, res);
-  } else if (hc->hc_data_complete) {
+  assert(!hc->hc_in_rtp_data);
+
+  if (hc->hc_data_complete) {
     http_client_get(hc);
     pthread_mutex_unlock(&hc->hc_mutex);
     res = hc->hc_data_complete(hc);
@@ -723,8 +717,7 @@ http_client_finish( http_client_t *hc )
       return HTTP_CON_RECEIVING;
     }
   }
-  if (TAILQ_FIRST(&hc->hc_wqueue) && hc->hc_code == HTTP_STATUS_OK &&
-      !hc->hc_in_rtp_data) {
+  if (TAILQ_FIRST(&hc->hc_wqueue) && hc->hc_code == HTTP_STATUS_OK) {
     hc->hc_code = 0;
     return http_client_send_partial(hc);
   }
@@ -1149,9 +1142,14 @@ rtsp_data:
         return res;
     }
     r += hc->hc_csize;
-    hc->hc_in_rtp_data = 1;
     hc->hc_code = 0;
-    res = http_client_finish(hc);
+    if (hc->hc_rtp_data_complete) {
+      http_client_get(hc);
+      pthread_mutex_unlock(&hc->hc_mutex);
+      res = hc->hc_rtp_data_complete(hc);
+      pthread_mutex_lock(&hc->hc_mutex);
+      http_client_put(hc);
+    }
     hc->hc_in_rtp_data = 0;
     if (res < 0)
       return http_client_flush(hc, res);