summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave <vdr@pickles.me.uk>2015-11-19 10:00:23 +0000
committerDave <vdr@pickles.me.uk>2015-11-19 10:00:23 +0000
commitdac0e06ec633377c436e76334c80b12da1c40c9b (patch)
treea658efe5fda7f2917c66df30c934782755947613
parent32c42cfcc8b220ea49aedc304e31ace4918306fc (diff)
downloadvdrtva-dac0e06ec633377c436e76334c80b12da1c40c9b.tar.gz
vdrtva-dac0e06ec633377c436e76334c80b12da1c40c9b.tar.bz2
Don't let CRID capture stall indefinitely for lock.
-rw-r--r--vdrtva-2.3.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/vdrtva-2.3.c b/vdrtva-2.3.c
index a9a74d7..e8e841e 100644
--- a/vdrtva-2.3.c
+++ b/vdrtva-2.3.c
@@ -1020,15 +1020,20 @@ cTvaFilter::cTvaFilter(void)
void cTvaFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length)
{
// do something with the data here
- LOCK_CHANNELS_READ;
+ cStateKey StateKey;
+ if ((const cTimers *Timers = cTimers::GetTimersRead(StateKey, 1)) == NULL) {
+ return;
+ }
switch (Pid) {
case 0x11: {
sectionSyncer.Reset();
SI::SDT sdt(Data, false);
if (!sdt.CheckCRCAndParse()) {
+ StateKey.Remove();
return;
}
if (!sectionSyncer.Sync(sdt.getVersionNumber(), sdt.getSectionNumber(), sdt.getLastSectionNumber())) {
+ StateKey.Remove();
return;
}
SI::SDT::Service SiSdtService;
@@ -1060,11 +1065,13 @@ void cTvaFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
// sectionSyncer.Reset();
SI::EIT eit(Data, false);
if (!eit.CheckCRCAndParse()) {
+ StateKey.Remove();
return;
}
const cChannel *chan = Channels->GetByChannelID(tChannelID(Source(),eit.getOriginalNetworkId(),eit.getTransportStreamId(),eit.getServiceId()));
if (!chan) {
+ StateKey.Remove();
return;
}
SI::EIT::Event SiEitEvent;
@@ -1117,6 +1124,7 @@ void cTvaFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
}
break;
}
+ StateKey.Remove();
}