diff options
| author | Dave <vdr@pickles.me.uk> | 2015-11-19 10:00:23 +0000 |
|---|---|---|
| committer | Dave <vdr@pickles.me.uk> | 2015-11-19 10:00:23 +0000 |
| commit | dac0e06ec633377c436e76334c80b12da1c40c9b (patch) | |
| tree | a658efe5fda7f2917c66df30c934782755947613 | |
| parent | 32c42cfcc8b220ea49aedc304e31ace4918306fc (diff) | |
| download | vdrtva-dac0e06ec633377c436e76334c80b12da1c40c9b.tar.gz vdrtva-dac0e06ec633377c436e76334c80b12da1c40c9b.tar.bz2 | |
Don't let CRID capture stall indefinitely for lock.
| -rw-r--r-- | vdrtva-2.3.c | 10 |
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(); } |
