[mythtv-commits] Ticket #1153: Ringbuffer Race condition
MythTV
mythtv at cvs.mythtv.org
Sun Jan 7 09:38:06 UTC 2007
#1153: Ringbuffer Race condition
-----------------------------+----------------------------------------------
Reporter: ben at vanilla.net | Owner: danielk
Type: defect | Status: new
Priority: minor | Milestone: 0.21
Component: mythtv | Version: head
Severity: medium | Resolution:
-----------------------------+----------------------------------------------
Comment (by davidp at electronf.com):
I cant figure out how to attach so here is the svn diff:
Index: libs/libmythtv/recorderbase.cpp
===================================================================
--- libs/libmythtv/recorderbase.cpp (revision 12423)
+++ libs/libmythtv/recorderbase.cpp (working copy)
@@ -197,6 +197,9 @@
if (nextRingBuffer)
{
+
+ VERBOSE(VB_RECORD, LOC + "CheckForRingBufferSwitch() - Switching
Ring-Buffer");
+
FinishRecording();
ResetForNewFile();
Index: libs/libmythtv/tv_rec.cpp
===================================================================
--- libs/libmythtv/tv_rec.cpp (revision 12423)
+++ libs/libmythtv/tv_rec.cpp (working copy)
@@ -135,7 +135,10 @@
// tvchain
tvchain(NULL),
// RingBuffer info
- ringBuffer(NULL), rbFileExt("mpg")
+ //ringBuffer(NULL), rbFileExt("mpg")
+ ringBuffer(NULL),
+ ringBufferSwitchInProgress(false),
+ rbFilePrefix(""), rbFileExt("mpg")
{
}
@@ -1311,7 +1314,10 @@
<<"!has_rec("<<!has_rec<<") "
<<"!rec_soon("<<!rec_soon<<") "
<<"curRec("<<curRecording<<") "
-
<<"starttm("<<starttime.toString(Qt::ISODate)<<")");
+//
<<"starttm("<<starttime.toString(Qt::ISODate)<<")");
+
<<"starttm("<<starttime.toString(Qt::ISODate)<<")"
+ <<"now(" << now.toString(Qt::ISODate)<<")"
+ <<"curRecording->endts(" <<
curRecording->endts.toString(Qt::ISODate)<<")");
// last = QDateTime::currentDateTime().addSecs(20);
}
else
@@ -3084,6 +3090,7 @@
curRecording = new ProgramInfo(*pginfo);
curRecording->MarkAsInUse(true, "recorder");
}
+ ringBufferSwitchInProgress = false;
}
QString TVRec::TuningGetChanNum(const TuningRequest &request,
@@ -4151,8 +4158,20 @@
bool TVRec::SwitchLiveTVRingBuffer(bool discont, bool set_rec)
{
VERBOSE(VB_RECORD, LOC + "SwitchLiveTVRingBuffer(discont "
- <<discont<<", set_rec "<<set_rec<<")");
+// <<discont<<", set_rec "<<set_rec<<")");
+ <<discont<<", set_rec "<<set_rec<<") - ringBufferSwitchInProgress("
<< ringBufferSwitchInProgress << ")");
+ if (set_rec && ringBufferSwitchInProgress)
+ {
+ /* The ring-buffer is already being switched */
+ return false;
+ }
+ else if (set_rec && !ringBufferSwitchInProgress)
+ {
+ ringBufferSwitchInProgress = true;
+ }
+
+
ProgramInfo *pginfo = NULL;
RingBuffer *rb = NULL;
Index: libs/libmythtv/tv_rec.h
===================================================================
--- libs/libmythtv/tv_rec.h (revision 12423)
+++ libs/libmythtv/tv_rec.h (working copy)
@@ -371,6 +371,8 @@
// RingBuffer info
RingBuffer *ringBuffer;
+ bool ringBufferSwitchInProgress;
+ QString rbFilePrefix;
QString rbFileExt;
public:
--
Ticket URL: <http://svn.mythtv.org/trac/ticket/1153#comment:37>
MythTV <http://www.mythtv.org/>
MythTV
More information about the mythtv-commits
mailing list