1
0
mirror of https://github.com/VDR4Arch/vdr.git synced 2023-10-10 13:36:52 +02:00

Fixed PMT handling in case locking the Channels list times out

This commit is contained in:
Klaus Schmidinger 2020-12-12 10:31:52 +01:00
parent 9fa7de2036
commit dffeabbacb
3 changed files with 9 additions and 4 deletions

View File

@ -3638,6 +3638,7 @@ Helmut Binder <cco@aon.at>
for fixing generating the HashId in cEIT::cEIT() for fixing generating the HashId in cEIT::cEIT()
for fixing a bug in handling shared PMTs, where after the first pass not all SIDs of a for fixing a bug in handling shared PMTs, where after the first pass not all SIDs of a
PMT pid were checked any more PMT pid were checked any more
for reporting a problem with PMT handling in case locking the Channels list times out
Ulrich Eckhardt <uli@uli-eckhardt.de> Ulrich Eckhardt <uli@uli-eckhardt.de>
for reporting a problem with shutdown after user inactivity in case a plugin is for reporting a problem with shutdown after user inactivity in case a plugin is

View File

@ -9536,7 +9536,7 @@ Video Disk Recorder Revision History
cDvbTuner::GetSignalStats() to avoid problems with drivers that don't do this cDvbTuner::GetSignalStats() to avoid problems with drivers that don't do this
(thanks to Helmut Binder). (thanks to Helmut Binder).
2020-12-09: 2020-12-12:
- Fixed multiple recording entries in case a recording is started during the initial - Fixed multiple recording entries in case a recording is started during the initial
reading of the video directory (reported by Claus Muus). reading of the video directory (reported by Claus Muus).
@ -9551,3 +9551,5 @@ Video Disk Recorder Revision History
- Added initialization of cDvbFrontend::frontendInfo (thanks to Winfried Köhler). - Added initialization of cDvbFrontend::frontendInfo (thanks to Winfried Köhler).
- Fixed a bug in handling shared PMTs, where after the first pass not all SIDs of a - Fixed a bug in handling shared PMTs, where after the first pass not all SIDs of a
PMT pid were checked any more (thanks to Helmut Binder). PMT pid were checked any more (thanks to Helmut Binder).
- Fixed PMT handling in case locking the Channels list times out (reported by Helmut
Binder).

8
pat.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: pat.c 4.7 2020/12/09 21:42:26 kls Exp $ * $Id: pat.c 4.8 2020/12/12 10:31:52 kls Exp $
*/ */
#include "pat.h" #include "pat.h"
@ -392,9 +392,10 @@ bool cPatFilter::PmtVersionChanged(int PmtPid, int Sid, int Version, bool SetNew
se->PidEntry()->SetComplete(PmtPidComplete(PmtPid)); se->PidEntry()->SetComplete(PmtPidComplete(PmtPid));
} }
if (se->Version() != Version) { if (se->Version() != Version) {
DBGLOG("PMT %d %2d %5d/%d %2d -> %2d", Transponder(), i, PmtPid, Sid, se->Version(), Version);
if (SetNewVersion) if (SetNewVersion)
se->SetVersion(Version); se->SetVersion(Version);
else
DBGLOG("PMT %d %2d %5d/%d %2d -> %2d", Transponder(), i, PmtPid, Sid, se->Version(), Version);
return true; return true;
} }
break; break;
@ -473,7 +474,7 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
SI::PMT pmt(Data, false); SI::PMT pmt(Data, false);
if (!pmt.CheckCRCAndParse()) if (!pmt.CheckCRCAndParse())
return; return;
if (!PmtVersionChanged(Pid, pmt.getTableIdExtension(), pmt.getVersionNumber(), true)) { if (!PmtVersionChanged(Pid, pmt.getTableIdExtension(), pmt.getVersionNumber(), false)) {
if (activePmt && activePmt->Complete()) if (activePmt && activePmt->Complete())
SwitchToNextPmtPid(); SwitchToNextPmtPid();
return; return;
@ -482,6 +483,7 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
cChannels *Channels = cChannels::GetChannelsWrite(StateKey, 10); cChannels *Channels = cChannels::GetChannelsWrite(StateKey, 10);
if (!Channels) if (!Channels)
return; return;
PmtVersionChanged(Pid, pmt.getTableIdExtension(), pmt.getVersionNumber(), true);
bool ChannelsModified = false; bool ChannelsModified = false;
if (activePmt && activePmt->Complete()) if (activePmt && activePmt->Complete())
SwitchToNextPmtPid(); SwitchToNextPmtPid();