mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Fixed a possible race condition in cDevice::Action() and cTSBuffer::Action()
This commit is contained in:
parent
c522225344
commit
8c0981583f
@ -189,6 +189,7 @@ Stefan Huelswitt <huels@iname.com>
|
||||
skin in case a shorter title is set after a longer one
|
||||
for fixing handling of pmAudioOnlyBlack
|
||||
for pointing out possible race conditions in handling childTid in cThread
|
||||
for fixing a possible race condition in cDevice::Action() and cTSBuffer::Action()
|
||||
|
||||
Ulrich Röder <roeder@efr-net.de>
|
||||
for pointing out that there are channels that have a symbol rate higher than
|
||||
|
2
HISTORY
2
HISTORY
@ -3318,3 +3318,5 @@ Video Disk Recorder Revision History
|
||||
cRecorder::cRecorder()
|
||||
cReceiver::cReceiver()
|
||||
cRemux::cRemux()
|
||||
- Fixed a possible race condition in cDevice::Action() and cTSBuffer::Action()
|
||||
(thanks to Stefan Huelswitt).
|
||||
|
13
device.c
13
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 1.74 2005/01/16 14:05:37 kls Exp $
|
||||
* $Id: device.c 1.75 2005/01/16 14:48:52 kls Exp $
|
||||
*/
|
||||
|
||||
#include "device.h"
|
||||
@ -991,8 +991,7 @@ bool cDevice::Receiving(bool CheckAny) const
|
||||
|
||||
void cDevice::Action(void)
|
||||
{
|
||||
active = true;
|
||||
if (OpenDvr()) {
|
||||
if (active && OpenDvr()) {
|
||||
for (; active;) {
|
||||
// Read data from the DVR device:
|
||||
uchar *b = NULL;
|
||||
@ -1054,7 +1053,10 @@ bool cDevice::AttachReceiver(cReceiver *Receiver)
|
||||
Receiver->device = this;
|
||||
receiver[i] = Receiver;
|
||||
Unlock();
|
||||
Start();
|
||||
if (!active) {
|
||||
active = true;
|
||||
Start();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -1094,10 +1096,10 @@ cTSBuffer::cTSBuffer(int File, int Size, int CardIndex)
|
||||
SetDescription("TS buffer on device %d", CardIndex);
|
||||
f = File;
|
||||
cardIndex = CardIndex;
|
||||
active = false;
|
||||
delivered = false;
|
||||
ringBuffer = new cRingBufferLinear(Size, TS_SIZE, true, "TS");
|
||||
ringBuffer->SetTimeouts(100, 100);
|
||||
active = true;
|
||||
Start();
|
||||
}
|
||||
|
||||
@ -1113,7 +1115,6 @@ void cTSBuffer::Action(void)
|
||||
if (ringBuffer) {
|
||||
bool firstRead = true;
|
||||
cPoller Poller(f);
|
||||
active = true;
|
||||
for (; active;) {
|
||||
if (firstRead || Poller.Poll(100)) {
|
||||
firstRead = false;
|
||||
|
Loading…
Reference in New Issue
Block a user