[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