From e3e21837d06d91e3fd849af88bb2335be52c8b21 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 11 May 2003 10:30:27 +0200 Subject: [PATCH] Removed the WaitForPut/WaitForGet stuff from cRingBuffer --- CONTRIBUTORS | 2 ++ HISTORY | 5 +++++ ringbuffer.c | 38 +------------------------------------- ringbuffer.h | 8 +------- 4 files changed, 9 insertions(+), 44 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index ca8febd2..ffc71857 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -587,6 +587,8 @@ Sascha Volkenandt for helping to fix a faulty behaviour of the "Mute" key in case the channel display is visible for making the 'epg.data' file being read after all plugins have been started + for reporting a problem with cReceivers that use a ring buffer and didn't immediately + return from their Receive() function if the buffer runs full Malcolm Caldwell for modifying LOF handling to allow for C-band reception diff --git a/HISTORY b/HISTORY index 64c61cd8..94653996 100644 --- a/HISTORY +++ b/HISTORY @@ -2124,3 +2124,8 @@ Video Disk Recorder Revision History is actually coming from. - Added VDRVERSNUM to config.h, which can be used by the preprocessor to check the actual VDR version (suggested by Stefan Huelswitt). +- Removed the WaitForPut/WaitForGet stuff from cRingBuffer, since it appears to + no longer be necessary due to the implementation of cNonBlockingFileReader in + dvbplayer.c. Also, the long timeout in WaitForPut caused problems with cReceivers + that use a ring buffer and didn't immediately return from their Receive() function + if the buffer runs full (thanks to Sascha Volkenandt for reporting this one). diff --git a/ringbuffer.c b/ringbuffer.c index 6913c71f..770b7c34 100644 --- a/ringbuffer.c +++ b/ringbuffer.c @@ -7,7 +7,7 @@ * Parts of this file were inspired by the 'ringbuffy.c' from the * LinuxDVB driver (see linuxtv.org). * - * $Id: ringbuffer.c 1.15 2003/04/27 09:54:32 kls Exp $ + * $Id: ringbuffer.c 1.16 2003/05/11 09:47:56 kls Exp $ */ #include "ringbuffer.h" @@ -31,30 +31,6 @@ cRingBuffer::~cRingBuffer() dsyslog("buffer stats: %d (%d%%) used", maxFill, maxFill * 100 / (size - 1)); } -void cRingBuffer::WaitForPut(void) -{ - putMutex.Lock(); - readyForPut.TimedWait(putMutex, 1000); - putMutex.Unlock(); -} - -void cRingBuffer::WaitForGet(void) -{ - getMutex.Lock(); - readyForGet.TimedWait(getMutex, 10); - getMutex.Unlock(); -} - -void cRingBuffer::EnablePut(void) -{ - readyForPut.Broadcast(); -} - -void cRingBuffer::EnableGet(void) -{ - readyForGet.Broadcast(); -} - // --- cRingBufferLinear ----------------------------------------------------- cRingBufferLinear::cRingBufferLinear(int Size, int Margin, bool Statistics) @@ -92,8 +68,6 @@ void cRingBufferLinear::Clear(void) head = tail = margin; lastGet = -1; Unlock(); - EnablePut(); - EnableGet(); } int cRingBufferLinear::Put(const uchar *Data, int Count) @@ -135,9 +109,6 @@ int cRingBufferLinear::Put(const uchar *Data, int Count) else Count = 0; Unlock(); - EnableGet(); - if (Count == 0) - WaitForPut(); } return Count; } @@ -163,8 +134,6 @@ uchar *cRingBufferLinear::Get(int &Count) Count = lastGet = cont; } Unlock(); - if (!p) - WaitForGet(); return p; } @@ -177,7 +146,6 @@ void cRingBufferLinear::Del(int Count) if (tail >= Size()) tail = margin; Unlock(); - EnablePut(); } else esyslog("ERROR: invalid Count in cRingBufferLinear::Del: %d", Count); @@ -228,8 +196,6 @@ void cRingBufferFrame::Clear(void) while ((p = Get()) != NULL) Drop(p); Unlock(); - EnablePut(); - EnableGet(); } bool cRingBufferFrame::Put(cFrame *Frame) @@ -246,7 +212,6 @@ bool cRingBufferFrame::Put(cFrame *Frame) } currentFill += Frame->Count(); Unlock(); - EnableGet(); return true; } return false; @@ -284,7 +249,6 @@ void cRingBufferFrame::Drop(cFrame *Frame) esyslog("ERROR: attempt to drop wrong frame from ring buffer!"); } Unlock(); - EnablePut(); } int cRingBufferFrame::Available(void) diff --git a/ringbuffer.h b/ringbuffer.h index 0ce0a485..6b256627 100644 --- a/ringbuffer.h +++ b/ringbuffer.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: ringbuffer.h 1.10 2003/04/27 09:55:08 kls Exp $ + * $Id: ringbuffer.h 1.11 2003/05/11 09:48:23 kls Exp $ */ #ifndef __RINGBUFFER_H @@ -16,17 +16,11 @@ class cRingBuffer { private: cMutex mutex; - cCondVar readyForPut, readyForGet; - cMutex putMutex, getMutex; int size; protected: int maxFill;//XXX int lastPercent; bool statistics;//XXX - void WaitForPut(void); - void WaitForGet(void); - void EnablePut(void); - void EnableGet(void); virtual void Clear(void) = 0; virtual int Available(void) = 0; int Free(void) { return size - Available() - 1; }