]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Implement fix from Forum fix-htsp-transcode 1391/head
authorFlole998 <Flole998@users.noreply.github.com>
Tue, 20 Apr 2021 19:58:06 +0000 (21:58 +0200)
committerGitHub <noreply@github.com>
Tue, 20 Apr 2021 19:58:06 +0000 (21:58 +0200)
Fix provided by https://tvheadend.org/boards/5/topics/43530?r=44328#message-44328

src/profile.c

index 17bdddf2e962c777b7ea907ad3b89abd4cd03af1..310a4c89b03fa393811613e79edca0eca58ff0fe 100644 (file)
@@ -954,27 +954,22 @@ profile_sharer_destroy(profile_chain_t *prch)
 {
   profile_sharer_t *prsh = prch->prch_sharer;
   profile_sharer_message_t *psm, *psm2;
-  int run = 0;
 
   if (prsh == NULL)
     return;
-  tvh_mutex_lock(&prsh->prsh_queue_mutex);
   LIST_REMOVE(prch, prch_sharer_link);
   if (LIST_EMPTY(&prsh->prsh_chains)) {
-    if ((run = prsh->prsh_queue_run) != 0) {
+    if (prsh->prsh_queue_run) {
+      tvh_mutex_lock(&prsh->prsh_queue_mutex);
       prsh->prsh_queue_run = 0;
       tvh_cond_signal(&prsh->prsh_queue_cond, 0);
-    }
-    prch->prch_sharer = NULL;
-    prch->prch_post_share = NULL;
-  }
-  tvh_mutex_unlock(&prsh->prsh_queue_mutex);
-  if (run) {
-    pthread_join(prsh->prsh_queue_thread, NULL);
-    while ((psm = TAILQ_FIRST(&prsh->prsh_queue)) != NULL) {
-      streaming_msg_free(psm->psm_sm);
-      TAILQ_REMOVE(&prsh->prsh_queue, psm, psm_link);
-      free(psm);
+      tvh_mutex_unlock(&prsh->prsh_queue_mutex);
+      pthread_join(prsh->prsh_queue_thread, NULL);
+      while ((psm = TAILQ_FIRST(&prsh->prsh_queue)) != NULL) {
+        streaming_msg_free(psm->psm_sm);
+        TAILQ_REMOVE(&prsh->prsh_queue, psm, psm_link);
+        free(psm);
+      }
     }
     if (prsh->prsh_tsfix)
       tsfix_destroy(prsh->prsh_tsfix);
@@ -985,6 +980,8 @@ profile_sharer_destroy(profile_chain_t *prch)
     if (prsh->prsh_start_msg)
       streaming_start_unref(prsh->prsh_start_msg);
     free(prsh);
+    prch->prch_sharer = NULL;
+    prch->prch_post_share = NULL;
   } else {
     if (prsh->prsh_queue_run) {
       tvh_mutex_lock(&prsh->prsh_queue_mutex);
@@ -999,24 +996,13 @@ profile_sharer_destroy(profile_chain_t *prch)
         TAILQ_REMOVE(&prsh->prsh_queue, psm, psm_link);
         free(psm);
       }
-      prch->prch_sharer = NULL;
-      prch->prch_post_share = NULL;
-      if (prsh->prsh_master == prch)
-        prsh->prsh_master = NULL;
-      tvh_mutex_unlock(&prsh->prsh_queue_mutex);
-    } else {
-#if ENABLE_LIBAV
-      if (prsh->prsh_transcoder)
-        transcoder_destroy(prsh->prsh_transcoder);
-      prsh->prsh_transcoder = NULL;
-#endif
-      tvh_mutex_lock(&prsh->prsh_queue_mutex);
-      prch->prch_sharer = NULL;
-      prch->prch_post_share = NULL;
-      if (prsh->prsh_master == prch)
-        prsh->prsh_master = NULL;
-      tvh_mutex_unlock(&prsh->prsh_queue_mutex);
     }
+    prch->prch_sharer = NULL;
+    prch->prch_post_share = NULL;
+    if (prsh->prsh_master == prch)
+      prsh->prsh_master = NULL;
+    if (prsh->prsh_queue_run)
+      tvh_mutex_unlock(&prsh->prsh_queue_mutex);
   }
 }