mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Fixed a possible deadlock when using the 'Blue' button in the 'Schedules' menu to switch to an other channel
This commit is contained in:
parent
8d4d7f2b62
commit
5261fd663f
@ -544,3 +544,7 @@ Jan Ekholm <chakie@infa.abo.fi>
|
||||
Marcel Wiesweg <marcel.wiesweg@gmx.de>
|
||||
for pointing out a problem with high CPU load during replay
|
||||
for reporting broken support for raw OSDs of plugins
|
||||
|
||||
Torsten Herz <torsten.herz@web.de>
|
||||
for fixing a possible deadlock when using the "Blue" button in the "Schedules" menu
|
||||
to switch to an other channel
|
||||
|
4
HISTORY
4
HISTORY
@ -1971,7 +1971,7 @@ Video Disk Recorder Revision History
|
||||
reporting this one).
|
||||
- Broken CAM connections are now restored automatically.
|
||||
|
||||
2003-03-09: Version 1.1.26
|
||||
2003-03-16: Version 1.1.26
|
||||
|
||||
- Removed signal handling and usleep(5000) from cDvbOsd::Cmd() (apparently this
|
||||
is no longer necessary with DVB driver 1.0.0pre2 or later).
|
||||
@ -1980,3 +1980,5 @@ Video Disk Recorder Revision History
|
||||
startup and uses the first one (if any) that actually has an MPEG decoder.
|
||||
That way this will also work automatically if the primary device is implemented
|
||||
by a plugin.
|
||||
- Fixed a possible deadlock when using the "Blue" button in the "Schedules" menu
|
||||
to switch to an other channel (thanks to Torsten Herz).
|
||||
|
9
eit.c
9
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)) {
|
||||
|
Loading…
Reference in New Issue
Block a user