From: Flole998 Date: Tue, 20 Apr 2021 19:58:06 +0000 (+0200) Subject: Implement fix from Forum X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fheads%2Ffix-htsp-transcode;p=thirdparty%2Ftvheadend.git Implement fix from Forum Fix provided by https://tvheadend.org/boards/5/topics/43530?r=44328#message-44328 --- diff --git a/src/profile.c b/src/profile.c index 17bdddf2e..310a4c89b 100644 --- a/src/profile.c +++ b/src/profile.c @@ -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); } }