Added a mutex to protect cOsd::Osds from simultaneous access from different threads

This commit is contained in:
Klaus Schmidinger 2011-08-15 09:37:54 +02:00
parent c13d6e6070
commit fc4bed511d
4 changed files with 11 additions and 3 deletions

View File

@ -1109,6 +1109,7 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi>
for some input on how to use BER and UNC values to generate a "quality" value for some input on how to use BER and UNC values to generate a "quality" value
for fixing some crashes in subtitle display for fixing some crashes in subtitle display
for reporting that DELETENULL() was not thread safe for reporting that DELETENULL() was not thread safe
for reporting a crash in subtitle display, related to cOsd::Osds
Ralf Klueber <ralf.klueber@vodafone.com> Ralf Klueber <ralf.klueber@vodafone.com>
for reporting a bug in cutting a recording if there is only a single editing mark for reporting a bug in cutting a recording if there is only a single editing mark

View File

@ -6650,7 +6650,7 @@ Video Disk Recorder Revision History
- Added support for "content identifier descriptor" and "default authority descriptor" - Added support for "content identifier descriptor" and "default authority descriptor"
to 'libsi' (thanks to Dave Pickles). to 'libsi' (thanks to Dave Pickles).
2011-08-14: Version 1.7.20 2011-08-15: Version 1.7.20
- Added some missing 'const' to tChannelID (reported by Sundararaj Reel). - Added some missing 'const' to tChannelID (reported by Sundararaj Reel).
- The isnumber() function now checks the given pointer for NULL (thanks to Holger - The isnumber() function now checks the given pointer for NULL (thanks to Holger
@ -6686,3 +6686,5 @@ Video Disk Recorder Revision History
- The pic2mpg script of the 'pictures' plugin now generates HD images (thanks to - The pic2mpg script of the 'pictures' plugin now generates HD images (thanks to
Andre Weidemann for his support in using convert/ffmpeg). The old SD version is Andre Weidemann for his support in using convert/ffmpeg). The old SD version is
still available as pic2mpg-sd. still available as pic2mpg-sd.
- Added a mutex to protect cOsd::Osds from simultaneous access from different threads
(reported by Rolf Ahrenberg).

6
osd.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: osd.c 2.22 2011/05/22 15:18:59 kls Exp $ * $Id: osd.c 2.23 2011/08/15 09:27:39 kls Exp $
*/ */
#include "osd.h" #include "osd.h"
@ -1600,9 +1600,11 @@ int cOsd::osdTop = 0;
int cOsd::osdWidth = 0; int cOsd::osdWidth = 0;
int cOsd::osdHeight = 0; int cOsd::osdHeight = 0;
cVector<cOsd *> cOsd::Osds; cVector<cOsd *> cOsd::Osds;
cMutex cOsd::mutex;
cOsd::cOsd(int Left, int Top, uint Level) cOsd::cOsd(int Left, int Top, uint Level)
{ {
cMutexLock MutexLock(&mutex);
isTrueColor = false; isTrueColor = false;
savedBitmap = NULL; savedBitmap = NULL;
numBitmaps = 0; numBitmaps = 0;
@ -1624,6 +1626,7 @@ cOsd::cOsd(int Left, int Top, uint Level)
cOsd::~cOsd() cOsd::~cOsd()
{ {
cMutexLock MutexLock(&mutex);
for (int i = 0; i < numBitmaps; i++) for (int i = 0; i < numBitmaps; i++)
delete bitmaps[i]; delete bitmaps[i];
delete savedBitmap; delete savedBitmap;
@ -1944,6 +1947,7 @@ cOsdProvider::~cOsdProvider()
cOsd *cOsdProvider::NewOsd(int Left, int Top, uint Level) cOsd *cOsdProvider::NewOsd(int Left, int Top, uint Level)
{ {
cMutexLock MutexLock(&cOsd::mutex);
if (Level == OSD_LEVEL_DEFAULT && cOsd::IsOpen()) if (Level == OSD_LEVEL_DEFAULT && cOsd::IsOpen())
esyslog("ERROR: attempt to open OSD while it is already open - using dummy OSD!"); esyslog("ERROR: attempt to open OSD while it is already open - using dummy OSD!");
else if (osdProvider) { else if (osdProvider) {

3
osd.h
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: osd.h 2.13 2011/04/17 14:24:32 kls Exp $ * $Id: osd.h 2.14 2011/08/15 09:22:50 kls Exp $
*/ */
#ifndef __OSD_H #ifndef __OSD_H
@ -709,6 +709,7 @@ class cOsd {
private: private:
static int osdLeft, osdTop, osdWidth, osdHeight; static int osdLeft, osdTop, osdWidth, osdHeight;
static cVector<cOsd *> Osds; static cVector<cOsd *> Osds;
static cMutex mutex;
bool isTrueColor; bool isTrueColor;
cBitmap *savedBitmap; cBitmap *savedBitmap;
cBitmap *bitmaps[MAXOSDAREAS]; cBitmap *bitmaps[MAXOSDAREAS];