Fix deletion of CecHandler

This commit is contained in:
LordGrey
2023-12-29 18:11:21 +01:00
parent 40d74faa5e
commit fcee3d0cbf

View File

@@ -1,5 +1,3 @@
#include <cassert>
#include <stdlib.h>
#include <QCoreApplication> #include <QCoreApplication>
#include <QResource> #include <QResource>
@@ -10,8 +8,6 @@
#include <QJsonObject> #include <QJsonObject>
#include <QJsonValue> #include <QJsonValue>
#include <QPair> #include <QPair>
#include <cstdint>
#include <limits>
#include <QThread> #include <QThread>
#include <utils/Components.h> #include <utils/Components.h>
@@ -239,9 +235,13 @@ void HyperionDaemon::handleInstanceStateChange(InstanceState state, quint8 insta
break; break;
case InstanceState::H_STOPPED: case InstanceState::H_STOPPED:
case InstanceState::H_ON_STOP:
case InstanceState::H_CREATED:
case InstanceState::H_DELETED:
break; break;
default: default:
qWarning() << "HyperionDaemon::handleInstanceStateChange - Unhandled state:" << static_cast<int>(state);
break; break;
} }
} }
@@ -271,30 +271,27 @@ void HyperionDaemon::freeObjects()
#ifdef ENABLE_MDNS #ifdef ENABLE_MDNS
if (_mDNSProvider != nullptr) if (_mDNSProvider != nullptr)
{ {
auto mDnsThread = _mDNSProvider->thread(); auto *mDnsThread = _mDNSProvider->thread();
mDnsThread->quit(); mDnsThread->quit();
mDnsThread->wait(); mDnsThread->wait();
delete mDnsThread;
_mDNSProvider = nullptr; _mDNSProvider = nullptr;
} }
#endif #endif
if (_jsonServer != nullptr) if (_jsonServer != nullptr)
{ {
auto jsonThread = _jsonServer->thread(); auto *jsonThread = _jsonServer->thread();
jsonThread->quit(); jsonThread->quit();
jsonThread->wait(); jsonThread->wait();
delete jsonThread;
_jsonServer = nullptr; _jsonServer = nullptr;
} }
#if defined(ENABLE_FLATBUF_SERVER) #if defined(ENABLE_FLATBUF_SERVER)
if (_flatBufferServer != nullptr) if (_flatBufferServer != nullptr)
{ {
auto flatBufferServerThread = _flatBufferServer->thread(); auto *flatBufferServerThread = _flatBufferServer->thread();
flatBufferServerThread->quit(); flatBufferServerThread->quit();
flatBufferServerThread->wait(); flatBufferServerThread->wait();
delete flatBufferServerThread;
_flatBufferServer = nullptr; _flatBufferServer = nullptr;
} }
#endif #endif
@@ -302,10 +299,9 @@ void HyperionDaemon::freeObjects()
#if defined(ENABLE_PROTOBUF_SERVER) #if defined(ENABLE_PROTOBUF_SERVER)
if (_protoServer != nullptr) if (_protoServer != nullptr)
{ {
auto protoServerThread = _protoServer->thread(); auto *protoServerThread = _protoServer->thread();
protoServerThread->quit(); protoServerThread->quit();
protoServerThread->wait(); protoServerThread->wait();
delete protoServerThread;
_protoServer = nullptr; _protoServer = nullptr;
} }
#endif #endif
@@ -313,28 +309,25 @@ void HyperionDaemon::freeObjects()
//ssdp before webserver //ssdp before webserver
if (_ssdp != nullptr) if (_ssdp != nullptr)
{ {
auto ssdpThread = _ssdp->thread(); auto *ssdpThread = _ssdp->thread();
ssdpThread->quit(); ssdpThread->quit();
ssdpThread->wait(); ssdpThread->wait();
delete ssdpThread;
_ssdp = nullptr; _ssdp = nullptr;
} }
if (_webserver != nullptr) if (_webserver != nullptr)
{ {
auto webserverThread = _webserver->thread(); auto *webserverThread = _webserver->thread();
webserverThread->quit(); webserverThread->quit();
webserverThread->wait(); webserverThread->wait();;
delete webserverThread;
_webserver = nullptr; _webserver = nullptr;
} }
if (_sslWebserver != nullptr) if (_sslWebserver != nullptr)
{ {
auto sslWebserverThread = _sslWebserver->thread(); auto *sslWebserverThread = _sslWebserver->thread();
sslWebserverThread->quit(); sslWebserverThread->quit();
sslWebserverThread->wait(); sslWebserverThread->wait();
delete sslWebserverThread;
_sslWebserver = nullptr; _sslWebserver = nullptr;
} }
@@ -342,15 +335,12 @@ void HyperionDaemon::freeObjects()
_instanceManager->stopAll(); _instanceManager->stopAll();
delete _amlGrabber; delete _amlGrabber;
if (_dispmanx != nullptr) delete _dispmanx;
delete _dispmanx;
delete _fbGrabber; delete _fbGrabber;
delete _osxGrabber; delete _osxGrabber;
delete _qtGrabber; delete _qtGrabber;
delete _dxGrabber; delete _dxGrabber;
delete _videoGrabber; delete _videoGrabber;
delete _audioGrabber;
_videoGrabber = nullptr; _videoGrabber = nullptr;
_amlGrabber = nullptr; _amlGrabber = nullptr;
_dispmanx = nullptr; _dispmanx = nullptr;
@@ -934,6 +924,8 @@ void HyperionDaemon::startCecHandler()
connect(cecHandlerThread, &QThread::started, _cecHandler, &CECHandler::start); connect(cecHandlerThread, &QThread::started, _cecHandler, &CECHandler::start);
connect(cecHandlerThread, &QThread::finished, _cecHandler, &CECHandler::stop); connect(cecHandlerThread, &QThread::finished, _cecHandler, &CECHandler::stop);
connect(cecHandlerThread, &QThread::finished, _cecHandler, &CECHandler::deleteLater);
connect(this, &HyperionDaemon::settingsChanged, _cecHandler, &CECHandler::handleSettingsUpdate); connect(this, &HyperionDaemon::settingsChanged, _cecHandler, &CECHandler::handleSettingsUpdate);
Info(_log, "CEC event handler created"); Info(_log, "CEC event handler created");
@@ -949,13 +941,11 @@ void HyperionDaemon::stopCecHandler()
#if defined(ENABLE_CEC) #if defined(ENABLE_CEC)
if (_cecHandler != nullptr) if (_cecHandler != nullptr)
{ {
auto cecHandlerThread = _cecHandler->thread(); auto *cecHandlerThread = _cecHandler->thread();
cecHandlerThread->quit(); cecHandlerThread->quit();
cecHandlerThread->wait(); cecHandlerThread->wait();
delete cecHandlerThread;
_cecHandler = nullptr; _cecHandler = nullptr;
} }
Info(_log, "CEC handler stopped"); Info(_log, "CEC handler stopped");
#endif #endif
} }