From 56e2ed262838e05cbeb2848571dd4c8d45425506 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Tue, 24 Nov 2020 21:19:49 +0100 Subject: [PATCH] Fixed "read incomplete section" errors --- CONTRIBUTORS | 1 + HISTORY | 3 ++- dvbdevice.c | 8 +++++++- sections.c | 9 +++------ sections.h | 3 +-- 5 files changed, 14 insertions(+), 10 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 29a91c90..9e702288 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -3633,6 +3633,7 @@ Helmut Binder possible error message for initializing the status variable in cDvbTuner::GetFrontendStatus() and cDvbTuner::GetSignalStats() to avoid problems with drivers that don't do this + for fixing "read incomplete section" errors Ulrich Eckhardt for reporting a problem with shutdown after user inactivity in case a plugin is diff --git a/HISTORY b/HISTORY index 1bf64191..16d78aaf 100644 --- a/HISTORY +++ b/HISTORY @@ -9536,7 +9536,7 @@ Video Disk Recorder Revision History cDvbTuner::GetSignalStats() to avoid problems with drivers that don't do this (thanks to Helmut Binder). -2020-11-22: +2020-11-24: - Fixed multiple recording entries in case a recording is started during the initial reading of the video directory (reported by Claus Muus). @@ -9546,3 +9546,4 @@ Video Disk Recorder Revision History - Fixed allocating memory for cImage (reported by Christoph Haubrich). - Fixed parsing the '-l' command line option (reported by Harald Milz). - Fixed possible compilation errors with libjpeg (thanks to Bernd Kuhls). +- Fixed "read incomplete section" errors (thanks to Helmut Binder). diff --git a/dvbdevice.c b/dvbdevice.c index a7797203..b5153db0 100644 --- a/dvbdevice.c +++ b/dvbdevice.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbdevice.c 4.27 2020/10/16 13:58:45 kls Exp $ + * $Id: dvbdevice.c 4.28 2020/11/24 21:19:49 kls Exp $ */ #include "dvbdevice.h" @@ -2138,11 +2138,17 @@ bool cDvbDevice::SetPid(cPidHandle *Handle, int Type, bool On) return true; } +#define RB_NUM_SECTIONS 8 // default: 2 sections = 8192 bytes + int cDvbDevice::OpenFilter(u_short Pid, u_char Tid, u_char Mask) { cString FileName = DvbName(DEV_DVB_DEMUX, adapter, frontend); int f = open(FileName, O_RDWR | O_NONBLOCK); if (f >= 0) { + if (Pid == EITPID) { // increase ringbuffer size for EIT + if (ioctl(f, DMX_SET_BUFFER_SIZE, MAX_SECTION_SIZE * RB_NUM_SECTIONS) < 0) + dsyslog("OpenFilter (pid=%d, tid=%02X): ioctl DMX_SET_BUFFER_SIZE failed", Pid, Tid); + } dmx_sct_filter_params sctFilterParams; memset(&sctFilterParams, 0, sizeof(sctFilterParams)); sctFilterParams.pid = Pid; diff --git a/sections.c b/sections.c index 4f076ad0..035096bb 100644 --- a/sections.c +++ b/sections.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: sections.c 4.1 2019/05/28 14:09:04 kls Exp $ + * $Id: sections.c 4.2 2020/11/24 21:19:49 kls Exp $ */ #include "sections.h" @@ -48,7 +48,6 @@ cSectionHandler::cSectionHandler(cDevice *Device) statusCount = 0; on = false; waitForLock = false; - lastIncompleteSection = 0; Start(); } @@ -212,10 +211,8 @@ void cSectionHandler::Action(void) fi->Process(pid, tid, buf, len); } } - else if (time(NULL) - lastIncompleteSection > 10) { // log them only every 10 seconds - dsyslog("read incomplete section - len = %d, r = %d", len, r); - lastIncompleteSection = time(NULL); - } + else + dsyslog("tp %d (%d/%02X) read incomplete section - len = %d, r = %d", Transponder(), fh->filterData.pid, buf[0], len, r); } } } diff --git a/sections.h b/sections.h index f11f4794..3aa03953 100644 --- a/sections.h +++ b/sections.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: sections.h 1.5 2005/08/13 11:23:55 kls Exp $ + * $Id: sections.h 4.1 2020/11/24 21:19:49 kls Exp $ */ #ifndef __SECTIONS_H @@ -27,7 +27,6 @@ private: cDevice *device; int statusCount; bool on, waitForLock; - time_t lastIncompleteSection; cList filters; cList filterHandles; void Add(const cFilterData *FilterData);