Ticket #6897: device-read-buffer-fix-v1.patch

File device-read-buffer-fix-v1.patch, 2.0 KB (added by Matthias Dahl <devel@…>, 15 years ago)
  • mythtv/libs/libmythtv/DeviceReadBuffer.cpp

    diff -uNr a/mythtv/libs/libmythtv/DeviceReadBuffer.cpp b/mythtv/libs/libmythtv/DeviceReadBuffer.cpp
    a b  
    156156void DeviceReadBuffer::SetPaused(bool val)
    157157{
    158158    QMutexLocker locker(&lock);
    159     paused = val;
     159    paused.fetchAndStoreOrdered(val);
    160160    if (val)
    161161        pauseWait.wakeAll();
    162162    else
     
    165165
    166166bool DeviceReadBuffer::IsPaused(void) const
    167167{
    168     QMutexLocker locker(&lock);
    169168    return paused;
    170169}
    171170
     
    332331    return false;
    333332#else
    334333    bool retval = true;
     334
     335    unsigned int elapsed = 0;
     336    unsigned int timeout = 2500 /* ms */;
    335337    MythTimer timer;
    336338    timer.start();
    337339
     
    371373        }
    372374        else //  ret == 0
    373375        {
    374             if (timer.elapsed() > 2500 /*ms*/)
     376            elapsed += timer.restart();
     377            if (elapsed > timeout)
    375378            {
    376                 VERBOSE(VB_RECORD, LOC_ERR + "Poll giving up");
    377                 QMutexLocker locker(&lock);
    378                 error = true;
    379                 return true;
     379                timeout = elapsed + 5000 /* ms */;
     380
     381                VERBOSE(VB_RECORD, LOC_ERR + QString("No data seen for %1 msecs.")
     382                                             .arg(elapsed));
    380383            }
    381384        }
    382385    }
  • mythtv/libs/libmythtv/DeviceReadBuffer.h

    diff -uNr a/mythtv/libs/libmythtv/DeviceReadBuffer.h b/mythtv/libs/libmythtv/DeviceReadBuffer.h
    a b  
    1111#include <qwaitcondition.h>
    1212#include <qstring.h>
    1313
     14#include <QAtomicInt>
     15
    1416#include "util.h"
    1517
    1618class ReaderPausedCB
     
    8688    bool             eof;
    8789    mutable bool     error;
    8890    bool             request_pause;
    89     bool             paused;
     91    QAtomicInt       paused;
    9092    bool             using_poll;
    9193
    9294    size_t           size;