]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
cwc: fix another mutex dead-lock
authorJaroslav Kysela <perex@perex.cz>
Tue, 20 Jun 2017 13:14:44 +0000 (15:14 +0200)
committerJaroslav Kysela <perex@perex.cz>
Thu, 22 Jun 2017 12:37:45 +0000 (14:37 +0200)
src/descrambler/cwc.c

index 44a1d26e20823eb8648de1e3118df008fb7725ab..9a5f05774727c1f1ffdd1909acaa325239c514fb 100644 (file)
@@ -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) {