From e1773c2cf7bb38dc08ffa3a134602c8b173f6c9d Mon Sep 17 00:00:00 2001 From: Jean-Yves Avenard Date: Mon, 17 Jun 2013 22:21:14 +1000 Subject: [PATCH] Make sure we delete RAOP device in the thread that started it. Fixes occasional crash at shutdown --- mythtv/libs/libmythtv/AirPlay/mythraopdevice.cpp | 13 ++++++++----- mythtv/libs/libmythtv/AirPlay/mythraopdevice.h | 1 + 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/mythtv/libs/libmythtv/AirPlay/mythraopdevice.cpp b/mythtv/libs/libmythtv/AirPlay/mythraopdevice.cpp index 225a97a4df0..701f30311d5 100644 --- a/mythtv/libs/libmythtv/AirPlay/mythraopdevice.cpp +++ b/mythtv/libs/libmythtv/AirPlay/mythraopdevice.cpp @@ -55,6 +55,9 @@ bool MythRAOPDevice::Create(void) QObject::connect( gMythRAOPDeviceThread->qthread(), SIGNAL(started()), gMythRAOPDevice, SLOT(Start())); + QObject::connect( + gMythRAOPDeviceThread->qthread(), SIGNAL(finished()), + gMythRAOPDevice, SLOT(Stop())); gMythRAOPDeviceThread->start(QThread::LowestPriority); } @@ -67,9 +70,6 @@ void MythRAOPDevice::Cleanup(void) { LOG(VB_GENERAL, LOG_INFO, LOC + "Cleaning up."); - if (gMythRAOPDevice) - gMythRAOPDevice->Teardown(); - QMutexLocker locker(gMythRAOPDeviceMutex); if (gMythRAOPDeviceThread) { @@ -92,8 +92,6 @@ MythRAOPDevice::MythRAOPDevice() MythRAOPDevice::~MythRAOPDevice() { - Teardown(); - delete m_lock; m_lock = NULL; } @@ -149,6 +147,11 @@ void MythRAOPDevice::Start(void) return; } +void MythRAOPDevice::Stop(void) +{ + Teardown(); +} + bool MythRAOPDevice::RegisterForBonjour(void) { // announce service diff --git a/mythtv/libs/libmythtv/AirPlay/mythraopdevice.h b/mythtv/libs/libmythtv/AirPlay/mythraopdevice.h index 6a89e86ee37..d90a46c36ea 100644 --- a/mythtv/libs/libmythtv/AirPlay/mythraopdevice.h +++ b/mythtv/libs/libmythtv/AirPlay/mythraopdevice.h @@ -30,6 +30,7 @@ class MTV_PUBLIC MythRAOPDevice : public ServerPool private slots: void Start(); + void Stop(); void newConnection(QTcpSocket *client); void deleteClient();