Ticket #1153: ringBufferSwitchRaceConditionFix.diff

File ringBufferSwitchRaceConditionFix.diff, 2.7 KB (added by Bradley Kite <bradley.kite@…>, 18 years ago)

Patch to fix this bug.

  • libs/libmythtv/recorderbase.cpp

     
    197197
    198198    if (nextRingBuffer)
    199199    {
     200        VERBOSE(VB_RECORD, LOC + "CheckForRingBufferSwitch() - Switching Ring-Buffer");
     201
    200202        FinishRecording();
    201203        ResetForNewFile();
    202204
  • libs/libmythtv/tv_rec.cpp

     
    136136      // tvchain
    137137      tvchain(NULL),
    138138      // RingBuffer info
    139       ringBuffer(NULL), rbFilePrefix(""), rbFileExt("mpg")
     139      ringBuffer(NULL),
     140      ringBufferSwitchInProgress(false),
     141      rbFilePrefix(""), rbFileExt("mpg")
    140142{
    141143}
    142144
     
    13331335                        <<"!has_rec("<<!has_rec<<") "
    13341336                        <<"!rec_soon("<<!rec_soon<<") "
    13351337                        <<"curRec("<<curRecording<<") "
    1336                         <<"starttm("<<starttime.toString(Qt::ISODate)<<")");
     1338                        <<"starttm("<<starttime.toString(Qt::ISODate)<<")"
     1339                        <<"now(" << now.toString(Qt::ISODate)<<")"
     1340                        <<"curRecording->endts(" << curRecording->endts.toString(Qt::ISODate)<<")");
    13371341//                last = QDateTime::currentDateTime().addSecs(20);
    13381342            }
    13391343            else
     
    30883092        curRecording = new ProgramInfo(*pginfo);
    30893093        curRecording->MarkAsInUse(true, "recorder");
    30903094    }
     3095    ringBufferSwitchInProgress = false;
    30913096}
    30923097
    30933098QString TVRec::TuningGetChanNum(const TuningRequest &request,
     
    40894094bool TVRec::SwitchLiveTVRingBuffer(bool discont, bool set_rec)
    40904095{
    40914096    VERBOSE(VB_RECORD, LOC + "SwitchLiveTVRingBuffer(discont "
    4092             <<discont<<", set_rec "<<set_rec<<")");
     4097            <<discont<<", set_rec "<<set_rec<<") - ringBufferSwitchInProgress(" << ringBufferSwitchInProgress << ")");
    40934098
     4099    if (set_rec && ringBufferSwitchInProgress)
     4100    {
     4101        /* The ring-buffer is already being switched */
     4102        return false;
     4103    }
     4104    else if (set_rec && !ringBufferSwitchInProgress)
     4105    {
     4106        ringBufferSwitchInProgress = true;
     4107    }
     4108
    40944109    ProgramInfo *pginfo = NULL;
    40954110    RingBuffer *rb = NULL;
    40964111
  • libs/libmythtv/tv_rec.h

     
    366366
    367367    // RingBuffer info
    368368    RingBuffer  *ringBuffer;
     369    bool         ringBufferSwitchInProgress;
    369370    QString      rbFilePrefix;
    370371    QString      rbFileExt;
    371372