Skip to content

Commit

Permalink
Change SignalMonitor shutdown so it works for IPTVSignalMonitor
Browse files Browse the repository at this point in the history
The problem was mainly that the MThread::exit(0); wasn't being called when shutdown from the SignalMonitor dtor because it was calling it's version of SetRunningDesired() not the IPTVSignalMonitor version. But there also seems to be a problem wherein the MThread::exit(0); doesn't register with the QThread, so we now call it every 100 ms until it takes.
  • Loading branch information
daniel-kristjansson committed Mar 9, 2012
1 parent f3e37ed commit ed6ebe1
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 19 deletions.
7 changes: 0 additions & 7 deletions mythtv/libs/libmythtv/iptvstreamhandler.cpp
Expand Up @@ -113,13 +113,6 @@ IPTVStreamHandler::IPTVStreamHandler(const IPTVTuningData &tuning) :
m_use_rtp_streaming = m_tuning.GetDataURL().scheme().toUpper() == "RTP";
}

void IPTVStreamHandler::SetRunningDesired(bool desired)
{
StreamHandler::SetRunningDesired(desired);
if (!desired)
exit(0);
}

void IPTVStreamHandler::run(void)
{
RunProlog();
Expand Down
2 changes: 0 additions & 2 deletions mythtv/libs/libmythtv/iptvstreamhandler.h
Expand Up @@ -88,8 +88,6 @@ class IPTVStreamHandler : public StreamHandler

virtual void run(void); // MThread

virtual void SetRunningDesired(bool desired); // StreamHandler

private:
IPTVTuningData m_tuning;
QUdpSocket *m_sockets[IPTV_SOCKET_COUNT];
Expand Down
19 changes: 10 additions & 9 deletions mythtv/libs/libmythtv/streamhandler.cpp
Expand Up @@ -175,17 +175,11 @@ void StreamHandler::Stop(void)
{
QMutexLocker locker(&_start_stop_lock);

do
while (_running)
{
SetRunningDesired(false);
while (!_running_desired && _running)
_running_state_changed.wait(&_start_stop_lock, 100);
if (_running_desired)
{
LOG(VB_GENERAL, LOG_WARNING, LOC +
"Programmer Error: Start called before Stop finished");
}
} while (_running_desired);
_running_state_changed.wait(&_start_stop_lock, 100);
}

wait();
}
Expand All @@ -207,6 +201,13 @@ void StreamHandler::SetRunning(bool is_running,
_running_state_changed.wakeAll();
}

void StreamHandler::SetRunningDesired(bool desired)
{
_running_desired = desired;
if (!desired)
MThread::exit(0);
}

bool StreamHandler::AddPIDFilter(PIDInfo *info)
{
#ifdef DEBUG_PID_FILTERS
Expand Down
2 changes: 1 addition & 1 deletion mythtv/libs/libmythtv/streamhandler.h
Expand Up @@ -94,7 +94,7 @@ class StreamHandler : protected MThread, public DeviceReaderCB
/// At minimum this sets _running_desired, this may also send
/// signals to anything that might be blocking the run() loop.
/// \note: The _start_stop_lock must be held when this is called.
virtual void SetRunningDesired(bool desired) { _running_desired = desired; }
void SetRunningDesired(bool desired);

protected:
QString _device;
Expand Down

0 comments on commit ed6ebe1

Please sign in to comment.