From: Jaroslav Kysela Date: Tue, 20 Jun 2017 13:14:44 +0000 (+0200) Subject: cwc: fix another mutex dead-lock X-Git-Tag: v4.2.3~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=81e7d4bf2b6eb796c48174b52d8982862d7f189f;p=thirdparty%2Ftvheadend.git cwc: fix another mutex dead-lock --- diff --git a/src/descrambler/cwc.c b/src/descrambler/cwc.c index 44a1d26e2..9a5f05774 100644 --- a/src/descrambler/cwc.c +++ b/src/descrambler/cwc.c @@ -1517,13 +1517,11 @@ cwc_service_pid_free(cwc_service_t *ct) * cwc_mutex is held */ static void -cwc_service_destroy(th_descrambler_t *td) +cwc_service_destroy0(th_descrambler_t *td) { cwc_service_t *ct = (cwc_service_t *)td; cwc_t *cwc = ct->cs_cwc; - int i; - pthread_mutex_lock(&cwc->cwc_mutex); for (i = 0; i < CWC_ES_PIDS; i++) if (ct->cs_epids[i]) descrambler_close_pid(ct->cs_mux, ct, @@ -1537,6 +1535,16 @@ cwc_service_destroy(th_descrambler_t *td) free(ct->td_nicename); free(ct); +} + +/** + * cwc_mutex is held + */ +static void +cwc_service_destroy(th_descrambler_t *td) +{ + pthread_mutex_lock(&cwc->cwc_mutex); + cwc_service_destroy0(td); pthread_mutex_unlock(&cwc->cwc_mutex); } @@ -1586,7 +1594,7 @@ cwc_service_start(caclient_t *cac, service_t *t) if (st) break; } if (!pcard) { - if (ct) cwc_service_destroy((th_descrambler_t*)ct); + if (ct) cwc_service_destroy0((th_descrambler_t*)ct); goto end; } if (ct) {