Fix Memory leaks (#1678)

* Refactor to fix #1671

* Add GUI/NonGUI mode to info page

* Do not show lock config, if in non-UI mode

* Updae Changelog

* Correct includes

* Ensure key member initialization - RGB Channels

* Ensure key member initialization - WebServer

* Update RGBChannels

* Fix initialization order

* Fix key when inserting new logger in LoggerMap,
Prepare logBuffer-JSON snapshot view in LoggerManager,
Increase buffered loglines to 500

* Fix Memory leak in GrabberWrapper

* Fix Memory leak in BlackBorderProcessor

* Fix Memory leak in BlackBorderProcessor

* use ninja generator under macos

* Fix BGEffectHandler destruction

* Fix Mdns code

* Clear list after applying qDeleteAll

* Fix deletion of CecHandler

* Fix memory leak caused by wrong buffer allocation

* Remove extra pixel consistently

* Change mDNS to Qt SmartPointers

* Correct removal

* Fix usage of _width/_height (they are the output resolution, not the screen resolution)
That avoids unnecessary resizing of the output image with every transferFrame call

* Move main non Thread Objects to Smart Pointers

* Revert "Move main non Thread Objects to Smart Pointers"

This reverts commit 26102ca963.

* Add missing deletes

* Revert MdnsBrowser chnage

* Revert MdnsBrowser change

* Fix memory leaks related standalone grabber

* Address CodeQL finding

* delete pointer OsxFrameGrabber

---------

Co-authored-by: Paulchen-Panther <16664240+Paulchen-Panther@users.noreply.github.com>
This commit is contained in:
LordGrey
2024-01-13 17:04:45 +01:00
committed by GitHub
parent 8907d7370e
commit 05d24b99c4
46 changed files with 439 additions and 341 deletions

View File

@@ -164,5 +164,8 @@ int main(int argc, char ** argv)
Error(log, "%s", e.what());
return -1;
}
Logger::deleteInstance();
return 0;
}

View File

@@ -167,6 +167,8 @@ int main(int argc, char ** argv)
Error(log, "%s", e.what());
return -1;
}
Logger::deleteInstance();
return 0;
}

View File

@@ -167,5 +167,8 @@ int main(int argc, char ** argv)
Error(log, "%s", e.what());
return -1;
}
Logger::deleteInstance();
return 0;
}

View File

@@ -162,5 +162,8 @@ int main(int argc, char ** argv)
Error(log, "%s", e.what());
return -1;
}
Logger::deleteInstance();
return 0;
}

View File

@@ -167,5 +167,8 @@ int main(int argc, char ** argv)
Error(log, "%s", e.what());
return -1;
}
Logger::deleteInstance();
return 0;
}

View File

@@ -410,5 +410,7 @@ int main(int argc, char * argv[])
return 1;
}
Logger::deleteInstance();
return 0;
}

View File

@@ -287,5 +287,7 @@ int main(int argc, char** argv)
return 1;
}
Logger::deleteInstance();
return 0;
}

View File

@@ -166,5 +166,7 @@ int main(int argc, char ** argv)
return -1;
}
Logger::deleteInstance();
return 0;
}

View File

@@ -165,5 +165,7 @@ int main(int argc, char ** argv)
return -1;
}
Logger::deleteInstance();
return 0;
}

View File

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

View File

@@ -193,7 +193,7 @@ private:
HyperionIManager* _instanceManager;
AuthManager* _authManager;
#ifdef ENABLE_MDNS
MdnsProvider* _mDNSProvider;
MdnsProvider* _mDNSProvider;
#endif
NetOrigin* _netOrigin;
#if defined(ENABLE_EFFECTENGINE)
@@ -217,7 +217,7 @@ private:
OsEventHandler* _osEventHandler;
EventScheduler* _eventScheduler;
#ifdef ENABLE_CEC
CECHandler* _cecHandler;
CECHandler* _cecHandler;
#endif
#if defined(ENABLE_FLATBUF_SERVER)