From a67fe0663d07a6e91bfe22f5a86ce73d73b17563 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Thu, 7 Mar 2013 13:27:05 +0100 Subject: [PATCH] Fixed a possible deadlock when changing the audio track while replaying a recording --- HISTORY | 1 + device.c | 6 ++---- dvbplayer.c | 4 +--- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/HISTORY b/HISTORY index 547023d3..5ca52fb9 100644 --- a/HISTORY +++ b/HISTORY @@ -7720,3 +7720,4 @@ Video Disk Recorder Revision History - Renamed the "plp id" to a more general "stream id" and added support for DVB-S2 "Input Stream Identifier" (ISI) (based on a patch from Rolf Ahrenberg). With this VDR now supports "multi streaming" on DVB-S2 and DVB-T2 transponders. +- Fixed a possible deadlock when changing the audio track while replaying a recording. diff --git a/device.c b/device.c index ca897b0f..ff51a115 100644 --- a/device.c +++ b/device.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: device.c 2.73 2013/02/16 14:39:30 kls Exp $ + * $Id: device.c 2.74 2013/03/07 13:18:35 kls Exp $ */ #include "device.h" @@ -1290,7 +1290,6 @@ int cDevice::PlaySubtitle(const uchar *Data, int Length) int cDevice::PlayPesPacket(const uchar *Data, int Length, bool VideoOnly) { - cMutexLock MutexLock(&mutexCurrentAudioTrack); bool FirstLoop = true; uchar c = Data[3]; const uchar *Start = Data; @@ -1468,7 +1467,7 @@ int cDevice::PlayTsSubtitle(const uchar *Data, int Length) int cDevice::PlayTs(const uchar *Data, int Length, bool VideoOnly) { int Played = 0; - if (Data == NULL) { + if (!Data) { tsToPesVideo.Reset(); tsToPesAudio.Reset(); tsToPesSubtitle.Reset(); @@ -1478,7 +1477,6 @@ int cDevice::PlayTs(const uchar *Data, int Length, bool VideoOnly) return Length; } else { - cMutexLock MutexLock(&mutexCurrentAudioTrack); while (Length >= TS_SIZE) { if (Data[0] != TS_SYNC_BYTE) { int Skipped = 1; diff --git a/dvbplayer.c b/dvbplayer.c index e936ca2c..a4aa2dd7 100644 --- a/dvbplayer.c +++ b/dvbplayer.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbplayer.c 2.32 2013/02/25 12:15:58 kls Exp $ + * $Id: dvbplayer.c 2.33 2013/03/07 13:05:15 kls Exp $ */ #include "dvbplayer.h" @@ -810,8 +810,6 @@ void cDvbPlayer::Goto(int Index, bool Still) void cDvbPlayer::SetAudioTrack(eTrackType Type, const tTrackId *TrackId) { - if (isPesRecording) - return; // for some unknown reason this doesn't work with PES recordings - causes a segfault if (playMode == pmPlay) { int Current, Total; if (GetIndex(Current, Total, true))