summaryrefslogtreecommitdiff
path: root/eit.c
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2003-03-16 11:17:46 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2003-03-16 11:17:46 +0100
commit5261fd663f87f8649fe265122b2b8c4513e53f27 (patch)
tree7123748c63a5508c61c83afa55715253d7f51812 /eit.c
parent8d4d7f2b626226a543e09651772d43e7313ebbf5 (diff)
downloadvdr-5261fd663f87f8649fe265122b2b8c4513e53f27.tar.gz
vdr-5261fd663f87f8649fe265122b2b8c4513e53f27.tar.bz2
Fixed a possible deadlock when using the 'Blue' button in the 'Schedules' menu to switch to an other channel
Diffstat (limited to 'eit.c')
-rw-r--r--eit.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/eit.c b/eit.c
index eebe82c7..99d1e21d 100644
--- a/eit.c
+++ b/eit.c
@@ -16,7 +16,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: eit.c 1.65 2003/02/02 15:41:03 kls Exp $
+ * $Id: eit.c 1.66 2003/03/16 11:14:35 kls Exp $
***************************************************************************/
#include "eit.h"
@@ -1250,12 +1250,13 @@ void cSIProcessor::Action()
if (seclen == r)
{
//dsyslog("Received pid 0x%04X with table ID 0x%02X and length of %4d\n", pid, buf[0], seclen);
+ cMutexLock MutexLock(&schedulesMutex); // since the xMem... stuff is not thread safe, we need to use a "global" mutex
+ LOCK_THREAD;
switch (pid)
{
case 0x00:
if (buf[0] == 0x00)
{
- LOCK_THREAD;
if (pmtPid && time(NULL) - lastPmtScan > PMT_SCAN_TIMEOUT) {
DelFilter(pmtPid, 0x02);
pmtPid = 0;
@@ -1263,7 +1264,6 @@ void cSIProcessor::Action()
lastPmtScan = time(NULL);
}
if (!pmtPid) {
- cMutexLock MutexLock(&schedulesMutex); // since the xMem... stuff is not thread safe, we need to use a "global" mutex
struct LIST *pat = siParsePAT(buf);
if (pat) {
int Index = 0;
@@ -1301,7 +1301,6 @@ void cSIProcessor::Action()
case 0x12:
if (buf[0] != 0x72)
{
- cMutexLock MutexLock(&schedulesMutex);
cEIT ceit(buf, seclen, schedules);
ceit.ProcessEIT(buf, currentSource);
}
@@ -1310,9 +1309,7 @@ void cSIProcessor::Action()
break;
default: {
- LOCK_THREAD;
if (pid == pmtPid && buf[0] == 0x02 && currentSource && currentTransponder) {
- cMutexLock MutexLock(&schedulesMutex); // since the xMem... stuff is not thread safe, we need to use a "global" mutex
struct Pid *pi = siParsePMT(buf);
if (pi) {
for (struct LIST *d = (struct LIST *)pi->Descriptors; d; d = (struct LIST *)xSucc(d)) {