diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2002-03-02 09:37:56 +0100 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2002-03-02 09:37:56 +0100 |
commit | 9f5397b51006f7918c07217b98e91ced547eb6f6 (patch) | |
tree | 6a873b30ef5f801b44b35b02e04d83734534c8c3 | |
parent | 90af5a1bd94255222debf6c05ee159e2ca044680 (diff) | |
download | vdr-9f5397b51006f7918c07217b98e91ced547eb6f6.tar.gz vdr-9f5397b51006f7918c07217b98e91ced547eb6f6.tar.bz2 |
Fixed a deadlock when switching channels via Schedule/Now|Next/Switch
-rw-r--r-- | CONTRIBUTORS | 1 | ||||
-rw-r--r-- | HISTORY | 6 | ||||
-rw-r--r-- | config.h | 4 | ||||
-rw-r--r-- | dvbapi.c | 5 | ||||
-rw-r--r-- | eit.c | 22 |
5 files changed, 15 insertions, 23 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 1acaafcb..ed63a4bb 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -39,6 +39,7 @@ Martin Hammerschmid <martin@hammerschmid.com> for suggesting to display the direct channel select input on the OSD for suggesting to use the "Blue" button in the main menu to resume replay for implementing pege up/down with the "Left" and "Right" keys + for detecting a deadlock when switching channels via Schedule/Now|Next/Switch Bastian Guse <bastian@nocopy.de> for writing the FORMATS entry for timers.conf @@ -1047,3 +1047,9 @@ Video Disk Recorder Revision History - Fixed a crash in case there is no 'epg.data' at program start (thanks to Andreas Schultz). + +2002-03-01: Version 1.0.0pre3 + +- Fixed parsing 'E' records in epg2html.pl. +- Fixed a deadlock when switching channels via Schedule/Now|Next/Switch (reported + by Martin Hammerschmid). @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.h 1.100 2002/02/25 16:29:09 kls Exp $ + * $Id: config.h 1.101 2002/02/26 17:25:30 kls Exp $ */ #ifndef __CONFIG_H @@ -19,7 +19,7 @@ #include "eit.h" #include "tools.h" -#define VDRVERSION "1.0.0pre2" +#define VDRVERSION "1.0.0pre3" #define MAXPRIORITY 99 #define MAXLIFETIME 99 @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbapi.c 1.152 2002/02/24 12:53:51 kls Exp $ + * $Id: dvbapi.c 1.153 2002/03/02 09:37:56 kls Exp $ */ #include "dvbapi.h" @@ -2238,9 +2238,6 @@ bool cDvbApi::SetPids(bool ForRecording) eSetChannelResult cDvbApi::SetChannel(int ChannelNumber, int Frequency, char Polarization, int Diseqc, int Srate, int Vpid, int Apid1, int Apid2, int Dpid1, int Dpid2, int Tpid, int Ca, int Pnr) { - // Make sure the siProcessor won't access the device while switching - cThreadLock ThreadLock(siProcessor); - StopTransfer(); StopReplay(); @@ -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.38 2002/02/25 16:30:42 kls Exp $ + * $Id: eit.c 1.39 2002/03/01 16:32:11 kls Exp $ ***************************************************************************/ #include "eit.h" @@ -1047,8 +1047,6 @@ const char *cSIProcessor::GetEpgDataFileName(void) void cSIProcessor::SetStatus(bool On) { - LOCK_THREAD; - schedulesMutex.Lock(); ShutDownFilters(); if (On) { @@ -1061,7 +1059,6 @@ void cSIProcessor::SetStatus(bool On) AddFilter(0x12, 0x51); // event info, actual TS, schedule for another 4 days AddFilter(0x12, 0x61); // event info, other TS, schedule for another 4 days } - schedulesMutex.Unlock(); } /** use the vbi device to parse all relevant SI @@ -1085,20 +1082,15 @@ void cSIProcessor::Action() struct tm *ptm = localtime_r(&now, &tm_r); if (now - lastCleanup > 3600 && ptm->tm_hour == 5) { - LOCK_THREAD; - - schedulesMutex.Lock(); + cMutexLock MutexLock(&schedulesMutex); isyslog(LOG_INFO, "cleaning up schedules data"); schedules->Cleanup(); - schedulesMutex.Unlock(); lastCleanup = now; ReportEpgBugFixStats(true); } if (epgDataFileName && now - lastDump > 600) { - LOCK_THREAD; - - schedulesMutex.Lock(); + cMutexLock MutexLock(&schedulesMutex); FILE *f = fopen(GetEpgDataFileName(), "w"); if (f) { schedules->Dump(f); @@ -1107,7 +1099,6 @@ void cSIProcessor::Action() else LOG_ERROR; lastDump = now; - schedulesMutex.Unlock(); } } @@ -1162,12 +1153,9 @@ void cSIProcessor::Action() case 0x12: if (buf[0] != 0x72) { - LOCK_THREAD; - - schedulesMutex.Lock(); + cMutexLock MutexLock(&schedulesMutex); cEIT ceit(buf, seclen, schedules); ceit.ProcessEIT(buf); - schedulesMutex.Unlock(); } else dsyslog(LOG_INFO, "Received stuffing section in EIT\n"); @@ -1261,6 +1249,6 @@ bool cSIProcessor::ShutDownFilters(void) /** */ bool cSIProcessor::SetCurrentServiceID(unsigned short servid) { - LOCK_THREAD; + cMutexLock MutexLock(&schedulesMutex); return schedules ? schedules->SetCurrentServiceID(servid) : false; } |