Skip to content

Commit

Permalink
SignalMonitor: Timeout if we don't get a lock in a reasonable amount …
Browse files Browse the repository at this point in the history
…of time.
  • Loading branch information
jpoet committed Feb 5, 2013
1 parent 37827bc commit 6bae400
Show file tree
Hide file tree
Showing 16 changed files with 44 additions and 7 deletions.
6 changes: 5 additions & 1 deletion mythtv/libs/libmythtv/recorders/analogsignalmonitor.cpp
Expand Up @@ -20,7 +20,8 @@
AnalogSignalMonitor::AnalogSignalMonitor(
int db_cardnum, V4LChannel *_channel, uint64_t _flags) :
SignalMonitor(db_cardnum, _channel, _flags),
m_usingv4l2(false), m_width(0), m_stable_time(2000), m_lock_cnt(0)
m_usingv4l2(false), m_width(0), m_stable_time(2000), m_lock_cnt(0),
m_lock_timeout(1000 * 30 /* 30 seconds */)
{
int videofd = channel->GetFd();
if (videofd >= 0)
Expand Down Expand Up @@ -166,6 +167,9 @@ void AnalogSignalMonitor::UpdateValues(void)
return;
}

if (lock_timer.elapsed() > m_lock_timeout)
error = "Timed out.";

if (!running || exit)
return;

Expand Down
1 change: 1 addition & 0 deletions mythtv/libs/libmythtv/recorders/analogsignalmonitor.h
Expand Up @@ -30,6 +30,7 @@ class AnalogSignalMonitor : public SignalMonitor
int m_stable_time;
uint m_lock_cnt;
MythTimer m_timer;
int m_lock_timeout;
};

#endif // _ANALOG_SIGNAL_MONITOR_H_
6 changes: 5 additions & 1 deletion mythtv/libs/libmythtv/recorders/asisignalmonitor.cpp
Expand Up @@ -41,7 +41,8 @@
ASISignalMonitor::ASISignalMonitor(
int db_cardnum, ASIChannel *_channel, uint64_t _flags) :
DTVSignalMonitor(db_cardnum, _channel, _flags),
streamHandlerStarted(false), streamHandler(NULL)
streamHandlerStarted(false), streamHandler(NULL),
lock_timeout(1000 * 30 /* 30 seconds */ )
{
LOG(VB_CHANNEL, LOG_INFO, LOC + "ctor");
streamHandler = ASIStreamHandler::Get(_channel->GetDevice());
Expand Down Expand Up @@ -84,6 +85,9 @@ ASIChannel *ASISignalMonitor::GetASIChannel(void)
*/
void ASISignalMonitor::UpdateValues(void)
{
if (lock_timer.elapsed() > lock_timeout)
error = "Timed out.";

if (!running || exit)
return;

Expand Down
1 change: 1 addition & 0 deletions mythtv/libs/libmythtv/recorders/asisignalmonitor.h
Expand Up @@ -29,6 +29,7 @@ class ASISignalMonitor: public DTVSignalMonitor
protected:
bool streamHandlerStarted;
ASIStreamHandler *streamHandler;
int lock_timeout;
};

#endif // ASISIGNALMONITOR_H
6 changes: 5 additions & 1 deletion mythtv/libs/libmythtv/recorders/cetonsignalmonitor.cpp
Expand Up @@ -33,7 +33,8 @@
CetonSignalMonitor::CetonSignalMonitor(
int db_cardnum, CetonChannel* _channel, uint64_t _flags) :
DTVSignalMonitor(db_cardnum, _channel, _flags),
streamHandlerStarted(false), streamHandler(NULL)
streamHandlerStarted(false), streamHandler(NULL),
lock_timeout(1000 * 30 /* 30 seconds */)
{
LOG(VB_CHANNEL, LOG_INFO, LOC + "ctor");

Expand Down Expand Up @@ -81,6 +82,9 @@ CetonChannel *CetonSignalMonitor::GetCetonChannel(void)
*/
void CetonSignalMonitor::UpdateValues(void)
{
if (lock_timer.elapsed() > lock_timeout)
error = "Timed out.";

if (!running || exit)
return;

Expand Down
1 change: 1 addition & 0 deletions mythtv/libs/libmythtv/recorders/cetonsignalmonitor.h
Expand Up @@ -34,6 +34,7 @@ class CetonSignalMonitor: public DTVSignalMonitor
protected:
bool streamHandlerStarted;
CetonStreamHandler *streamHandler;
int lock_timeout;
};

#endif // CETONSIGNALMONITOR_H
6 changes: 5 additions & 1 deletion mythtv/libs/libmythtv/recorders/dvbsignalmonitor.cpp
Expand Up @@ -53,7 +53,8 @@ DVBSignalMonitor::DVBSignalMonitor(int db_cardnum, DVBChannel* _channel,
rotorPosition (QObject::tr("Rotor Progress"), "pos",
100, true, 0, 100, 0),
streamHandlerStarted(false),
streamHandler(NULL)
streamHandler(NULL),
lock_timeout(1000 * 60 * 2 /* 2 minutes */)
{
// These two values should probably come from the database...
int wait = 3000; // timeout when waiting on signal
Expand Down Expand Up @@ -209,6 +210,9 @@ DVBChannel *DVBSignalMonitor::GetDVBChannel(void)
*/
void DVBSignalMonitor::UpdateValues(void)
{
if (lock_timer.elapsed() > lock_timeout)
error = "Timed out.";

if (!running || exit)
return;

Expand Down
1 change: 1 addition & 0 deletions mythtv/libs/libmythtv/recorders/dvbsignalmonitor.h
Expand Up @@ -59,6 +59,7 @@ class DVBSignalMonitor: public DTVSignalMonitor

bool streamHandlerStarted;
DVBStreamHandler *streamHandler;
int lock_timeout;
};

#endif // DVBSIGNALMONITOR_H
6 changes: 5 additions & 1 deletion mythtv/libs/libmythtv/recorders/firewiresignalmonitor.cpp
Expand Up @@ -52,7 +52,8 @@ FirewireSignalMonitor::FirewireSignalMonitor(
tableMonitorThread(NULL),
stb_needs_retune(true),
stb_needs_to_wait_for_pat(false),
stb_needs_to_wait_for_power(false)
stb_needs_to_wait_for_power(false),
lock_timeout(1000 * 30 /* 30 seconds */)
{
LOG(VB_CHANNEL, LOG_INFO, LOC + "ctor");

Expand Down Expand Up @@ -191,6 +192,9 @@ void FirewireSignalMonitor::AddData(const unsigned char *data, uint len)
*/
void FirewireSignalMonitor::UpdateValues(void)
{
if (lock_timer.elapsed() > lock_timeout)
error = "Timed out.";

if (!running || exit)
return;

Expand Down
1 change: 1 addition & 0 deletions mythtv/libs/libmythtv/recorders/firewiresignalmonitor.h
Expand Up @@ -74,6 +74,7 @@ class FirewireSignalMonitor : public DTVSignalMonitor, public TSDataListener

static QMap<void*,uint> pat_keys;
static QMutex pat_keys_lock;
int lock_timeout;
};

#endif // _FIREWIRESIGNALMONITOR_H_
6 changes: 5 additions & 1 deletion mythtv/libs/libmythtv/recorders/hdhrsignalmonitor.cpp
Expand Up @@ -41,7 +41,8 @@
HDHRSignalMonitor::HDHRSignalMonitor(
int db_cardnum, HDHRChannel* _channel, uint64_t _flags) :
DTVSignalMonitor(db_cardnum, _channel, _flags),
streamHandlerStarted(false), streamHandler(NULL)
streamHandlerStarted(false), streamHandler(NULL),
lock_timeout(1000 * 30 /* 30 seconds */)
{
LOG(VB_CHANNEL, LOG_INFO, LOC + "ctor");

Expand Down Expand Up @@ -89,6 +90,9 @@ HDHRChannel *HDHRSignalMonitor::GetHDHRChannel(void)
*/
void HDHRSignalMonitor::UpdateValues(void)
{
if (lock_timer.elapsed() > lock_timeout)
error = "Timed out.";

if (!running || exit)
return;

Expand Down
1 change: 1 addition & 0 deletions mythtv/libs/libmythtv/recorders/hdhrsignalmonitor.h
Expand Up @@ -29,6 +29,7 @@ class HDHRSignalMonitor: public DTVSignalMonitor
protected:
bool streamHandlerStarted;
HDHRStreamHandler *streamHandler;
int lock_timeout;
};

#endif // HDHRSIGNALMONITOR_H
6 changes: 5 additions & 1 deletion mythtv/libs/libmythtv/recorders/iptvsignalmonitor.cpp
Expand Up @@ -25,7 +25,8 @@
IPTVSignalMonitor::IPTVSignalMonitor(int db_cardnum,
IPTVChannel *_channel,
uint64_t _flags) :
DTVSignalMonitor(db_cardnum, _channel, _flags)
DTVSignalMonitor(db_cardnum, _channel, _flags),
m_lock_timeout(1000 * 60 /* 1 minute */)
{
LOG(VB_CHANNEL, LOG_INFO, LOC + "ctor");

Expand Down Expand Up @@ -84,6 +85,9 @@ void IPTVSignalMonitor::HandlePAT(const ProgramAssociationTable *pat)
*/
void IPTVSignalMonitor::UpdateValues(void)
{
if (lock_timer.elapsed() > m_lock_timeout)
error = "Timed out.";

if (!running || exit)
return;

Expand Down
1 change: 1 addition & 0 deletions mythtv/libs/libmythtv/recorders/iptvsignalmonitor.h
Expand Up @@ -33,6 +33,7 @@ class IPTVSignalMonitor : public DTVSignalMonitor

protected:
bool m_streamHandlerStarted;
int m_lock_timeout;
};

#endif // _IPTVSIGNALMONITOR_H_
1 change: 1 addition & 0 deletions mythtv/libs/libmythtv/recorders/signalmonitor.cpp
Expand Up @@ -302,6 +302,7 @@ void SignalMonitor::run(void)
running = true;
startStopWait.wakeAll();

lock_timer.start();
while (!exit)
{
locker.unlock();
Expand Down
1 change: 1 addition & 0 deletions mythtv/libs/libmythtv/recorders/signalmonitor.h
Expand Up @@ -215,6 +215,7 @@ class SignalMonitor : protected MThread

mutable QMutex statusLock;
mutable QMutex listenerLock;
MythTimer lock_timer;
};

inline QString sm_flags_to_string(uint64_t flags)
Expand Down

0 comments on commit 6bae400

Please sign in to comment.