diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2003-03-16 11:17:46 +0100 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2003-03-16 11:17:46 +0100 |
commit | 5261fd663f87f8649fe265122b2b8c4513e53f27 (patch) | |
tree | 7123748c63a5508c61c83afa55715253d7f51812 /eit.c | |
parent | 8d4d7f2b626226a543e09651772d43e7313ebbf5 (diff) | |
download | vdr-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.c | 9 |
1 files changed, 3 insertions, 6 deletions
@@ -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)) { |