summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2013-03-07 13:27:05 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2013-03-07 13:27:05 +0100
commita67fe0663d07a6e91bfe22f5a86ce73d73b17563 (patch)
tree681d373abe6b54363026b91c46131f03d5d40e77
parent16c931453db9723cee36d2b51502558fcd1921c5 (diff)
downloadvdr-a67fe0663d07a6e91bfe22f5a86ce73d73b17563.tar.gz
vdr-a67fe0663d07a6e91bfe22f5a86ce73d73b17563.tar.bz2
Fixed a possible deadlock when changing the audio track while replaying a recording
-rw-r--r--HISTORY1
-rw-r--r--device.c6
-rw-r--r--dvbplayer.c4
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))