From 4051e8eb63fa54d870e881969a78b7b67f95c89f Mon Sep 17 00:00:00 2001 From: leslie Date: Tue, 22 Nov 2011 20:48:34 +0100 Subject: [PATCH] sasc: add nickb937's stability patches (partly) --- contrib/sasc-ng/dvblb_plugins/plugin_cam.c | 2 ++ contrib/sasc-ng/dvblb_plugins/plugin_ffdecsa.c | 4 ++++ contrib/sasc-ng/dvbloopback/src/msg_passing.c | 7 +++++++ contrib/sasc-ng/sc/sasccam.cpp | 4 ++-- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/contrib/sasc-ng/dvblb_plugins/plugin_cam.c b/contrib/sasc-ng/dvblb_plugins/plugin_cam.c index db590fd..1b30b68 100644 --- a/contrib/sasc-ng/dvblb_plugins/plugin_cam.c +++ b/contrib/sasc-ng/dvblb_plugins/plugin_cam.c @@ -260,6 +260,7 @@ void process_cam(struct msg *msg, unsigned int priority) if (sidmsg->calen == 0) { free_sidmsg(sidmsg); + msg->type = MSG_PROCESSED; return; } for(ch=Channels.First(); ch; ch=Channels.Next(ch)) { @@ -280,6 +281,7 @@ void process_cam(struct msg *msg, unsigned int priority) } } free_sidmsg(sidmsg); + msg->type = MSG_PROCESSED; return; } } else { diff --git a/contrib/sasc-ng/dvblb_plugins/plugin_ffdecsa.c b/contrib/sasc-ng/dvblb_plugins/plugin_ffdecsa.c index 030be27..254c4c2 100644 --- a/contrib/sasc-ng/dvblb_plugins/plugin_ffdecsa.c +++ b/contrib/sasc-ng/dvblb_plugins/plugin_ffdecsa.c @@ -123,11 +123,13 @@ void update_keys(int adpt, unsigned char keytype, int index, unsigned char *key, pthread_mutex_unlock(&csa->state_lock); return; } + pthread_mutex_lock(&csa->keylock); if(! csa->keyindex[index].valid) { csa->keyindex[index].valid = 1; csa->keyindex[index].status = 0; csa->keyindex[index].queued = 0; } + pthread_mutex_unlock(&csa->keylock); pop_entry_from_queue_l(pid_ll, &pidmap_empty_queue, struct pid, &list_lock); pid_ll->pid = pid; pid_ll->index = index; @@ -146,7 +148,9 @@ void update_keys(int adpt, unsigned char keytype, int index, unsigned char *key, ll_find_elem(pid_ll, csa->pid_map, index, index, struct pid); if(pid_ll == NULL) { //no valid pids on this index + pthread_mutex_lock(&csa->keylock); csa->keyindex[index].status = 0; + pthread_mutex_unlock(&csa->keylock); if(list_empty(&csa->pid_map)) { //state = ENCRYPTED_NOT_READY; csa->state = NOT_ENCRYPTED; diff --git a/contrib/sasc-ng/dvbloopback/src/msg_passing.c b/contrib/sasc-ng/dvbloopback/src/msg_passing.c index 0f4b637..ccbc529 100644 --- a/contrib/sasc-ng/dvbloopback/src/msg_passing.c +++ b/contrib/sasc-ng/dvbloopback/src/msg_passing.c @@ -46,11 +46,16 @@ void msg_loop_init() { struct msgctrl *msgctrl; int priority; + int x; for (priority=0; priority <= MSG_HIGH_PRIORITY; priority++) { msgctrl = &message_control[priority]; bzero(msgctrl, sizeof(struct msgctrl)); INIT_LIST_HEAD(&msgctrl->msglist); INIT_LIST_HEAD(&msgctrl->empty_queue); + for (x = 0; x < 10; x++) { + struct msg *msg = (struct msg *)malloc(sizeof(struct msg)); + list_add(&msg->list, &msgctrl->empty_queue); + } pthread_mutex_init(&msgctrl->mutex, NULL); pthread_cond_init(&msgctrl->cond, NULL); } @@ -95,6 +100,8 @@ void * msg_loop(void * arg) list_del(&msg->list); break; } + if (!msg) + break; //If we've seen all elements on the queue, or the queue is empty, //we are done if(ptr == &msgctrl->msglist) diff --git a/contrib/sasc-ng/sc/sasccam.cpp b/contrib/sasc-ng/sc/sasccam.cpp index 0704aa5..f10da78 100644 --- a/contrib/sasc-ng/sc/sasccam.cpp +++ b/contrib/sasc-ng/sc/sasccam.cpp @@ -41,14 +41,14 @@ extern void _SetCaPid(int adapter, ca_pid_t *ca_pid); bool cScSascDevice::SetCaDescr(ca_descr_t *ca_descr, bool initial) { - printf("Called cScSascDevice::SetCaDescr\n"); + //printf("Called cScSascDevice::SetCaDescr\n"); _SetCaDescr(cardIndex,ca_descr); return true; } bool cScSascDevice::SetCaPid(ca_pid_t *ca_pid) { - printf("Called cScSascDevice::SetCaPid\n"); + //printf("Called cScSascDevice::SetCaPid\n"); _SetCaPid(cardIndex,ca_pid); return true; } -- 2.39.5