{
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);
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);
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);
}
}