Fixed a race condition in the SPU decoder

This commit is contained in:
Klaus Schmidinger 2005-11-05 12:12:18 +01:00
parent 9607fd33a0
commit 596e965a53
4 changed files with 8 additions and 3 deletions

View File

@ -1241,6 +1241,7 @@ Marco Schl
for fixing detecting short channel names for "Kabel Deutschland" for fixing detecting short channel names for "Kabel Deutschland"
for reporting that the FATALERRNO macro needs to check for a non-zero errno value for reporting that the FATALERRNO macro needs to check for a non-zero errno value
for reporting missing mutex locks in cCiMenu::Abort() and cCiEnquiry::Abort() for reporting missing mutex locks in cCiMenu::Abort() and cCiEnquiry::Abort()
for fixing a race condition in the SPU decoder
Jürgen Schmitz <j.schmitz@web.de> Jürgen Schmitz <j.schmitz@web.de>
for reporting a bug in displaying the current channel when switching via the SVDRP for reporting a bug in displaying the current channel when switching via the SVDRP

View File

@ -3933,3 +3933,4 @@ Video Disk Recorder Revision History
commands of any length. The MAXPARSEBUFFER macros is now obsolete and has commands of any length. The MAXPARSEBUFFER macros is now obsolete and has
been removed. If a plugin has used that macro, it should either define been removed. If a plugin has used that macro, it should either define
a buffer size of its own, or use cReadLine when reading files. a buffer size of its own, or use cReadLine when reading files.
- Fixed a race condition in the SPU decoder (thanks to Marco Schlüßler).

View File

@ -8,7 +8,7 @@
* *
* parts of this file are derived from the OMS program. * parts of this file are derived from the OMS program.
* *
* $Id: dvbspu.c 1.16 2005/11/04 14:19:07 kls Exp $ * $Id: dvbspu.c 1.17 2005/11/05 12:08:15 kls Exp $
*/ */
#include <assert.h> #include <assert.h>
@ -338,6 +338,7 @@ sDvbSpuRect cDvbSpuDecoder::CalcAreaSize(sDvbSpuRect fgsize, cBitmap *fgbmp, sDv
void cDvbSpuDecoder::Draw(void) void cDvbSpuDecoder::Draw(void)
{ {
cMutexLock MutexLock(&mutex);
if (!spubmp) { if (!spubmp) {
Hide(); Hide();
return; return;
@ -390,6 +391,7 @@ void cDvbSpuDecoder::Draw(void)
void cDvbSpuDecoder::Hide(void) void cDvbSpuDecoder::Hide(void)
{ {
cMutexLock MutexLock(&mutex);
delete osd; delete osd;
osd = NULL; osd = NULL;
} }

View File

@ -8,7 +8,7 @@
* *
* parts of this file are derived from the OMS program. * parts of this file are derived from the OMS program.
* *
* $Id: dvbspu.h 1.9 2005/05/07 11:14:03 kls Exp $ * $Id: dvbspu.h 1.10 2005/11/05 12:08:47 kls Exp $
*/ */
#ifndef __DVBSPU_H #ifndef __DVBSPU_H
@ -91,7 +91,8 @@ class cDvbSpuBitmap {
class cDvbSpuDecoder:public cSpuDecoder { class cDvbSpuDecoder:public cSpuDecoder {
private: private:
cOsd * osd; cOsd *osd;
cMutex mutex;
// processing state // processing state
uint8_t *spu; uint8_t *spu;