]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
cccam: unset the busy flag when all services are deassigned
authorJaroslav Kysela <perex@perex.cz>
Wed, 24 Jan 2018 08:19:32 +0000 (09:19 +0100)
committerJaroslav Kysela <perex@perex.cz>
Wed, 24 Jan 2018 08:19:32 +0000 (09:19 +0100)
src/descrambler/cccam.c
src/descrambler/cclient.c
src/descrambler/cclient.h

index 9eb0251258c9586b39a1a732dafe87c82380f39d..52fc3d27431eaec3964ccbd75dc6e2f8ac9decf6 100644 (file)
@@ -872,6 +872,15 @@ cccam_read(void *cc, sbuf_t *rbuf)
   return 0;
 }
 
+/**
+ *
+ */
+static void
+cccam_no_services(void *cc)
+{
+  cccam_unset_busy((cccam_t *)cc);
+}
+
 /**
  *
  */
@@ -1051,5 +1060,6 @@ caclient_t *cccam_create(void)
   cccam->cc_send_ecm      = cccam_send_ecm;
   cccam->cc_send_emm      = cccam_send_emm;
   cccam->cc_keepalive     = cccam_send_ka;
+  cccam->cc_no_services   = cccam_no_services;
   return (caclient_t *)cccam;
 }
index 901589397cd21353074be8fe0de3995f7684eedb..1738504c248ba92c3581ffa978c3bd14146ed728 100644 (file)
@@ -995,7 +995,7 @@ end:
  * cc_mutex is held
  */
 static void
-cc_service_destroy0(th_descrambler_t *td)
+cc_service_destroy0(cclient_t *cc, th_descrambler_t *td)
 {
   cc_service_t *ct = (cc_service_t *)td;
   int i;
@@ -1012,6 +1012,9 @@ cc_service_destroy0(th_descrambler_t *td)
 
   free(ct->td_nicename);
   free(ct);
+
+  if (LIST_EMPTY(&cc->cc_services) && cc->cc_no_services)
+    cc->cc_no_services(cc);
 }
 
 /**
@@ -1024,7 +1027,7 @@ cc_service_destroy(th_descrambler_t *td)
   cclient_t *cc = ct->cs_client;
 
   pthread_mutex_lock(&cc->cc_mutex);
-  cc_service_destroy0(td);
+  cc_service_destroy0(cc, td);
   pthread_mutex_unlock(&cc->cc_mutex);
 }
 
@@ -1075,7 +1078,7 @@ cc_service_start(caclient_t *cac, service_t *t)
     if (st) break;
   }
   if (!pcard) {
-    if (ct) cc_service_destroy0((th_descrambler_t*)ct);
+    if (ct) cc_service_destroy0(cc, (th_descrambler_t*)ct);
     goto end;
   }
   if (ct) {
index acecd679f526b54bf9cdb6d1df8d2ca6860e4aca..c9d913c445869f3fab59ce28a4067417d299c1ca 100644 (file)
@@ -146,6 +146,7 @@ typedef struct cclient {
                      cc_card_data_t *pcard, const uint8_t *data, int len);
   void (*cc_send_emm)(void *cc, cc_service_t *ct, cc_card_data_t *pcard,
                       uint32_t provid, const uint8_t *data, int len);
+  void (*cc_no_services)(void *cc);
 
   /* Connection */
   int cc_fd;