mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
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:
@@ -164,5 +164,8 @@ int main(int argc, char ** argv)
|
||||
Error(log, "%s", e.what());
|
||||
return -1;
|
||||
}
|
||||
|
||||
Logger::deleteInstance();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -167,6 +167,8 @@ int main(int argc, char ** argv)
|
||||
Error(log, "%s", e.what());
|
||||
return -1;
|
||||
}
|
||||
|
||||
Logger::deleteInstance();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -167,5 +167,8 @@ int main(int argc, char ** argv)
|
||||
Error(log, "%s", e.what());
|
||||
return -1;
|
||||
}
|
||||
|
||||
Logger::deleteInstance();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -162,5 +162,8 @@ int main(int argc, char ** argv)
|
||||
Error(log, "%s", e.what());
|
||||
return -1;
|
||||
}
|
||||
|
||||
Logger::deleteInstance();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -167,5 +167,8 @@ int main(int argc, char ** argv)
|
||||
Error(log, "%s", e.what());
|
||||
return -1;
|
||||
}
|
||||
|
||||
Logger::deleteInstance();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -410,5 +410,7 @@ int main(int argc, char * argv[])
|
||||
return 1;
|
||||
}
|
||||
|
||||
Logger::deleteInstance();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -287,5 +287,7 @@ int main(int argc, char** argv)
|
||||
return 1;
|
||||
}
|
||||
|
||||
Logger::deleteInstance();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -166,5 +166,7 @@ int main(int argc, char ** argv)
|
||||
return -1;
|
||||
}
|
||||
|
||||
Logger::deleteInstance();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -165,5 +165,7 @@ int main(int argc, char ** argv)
|
||||
return -1;
|
||||
}
|
||||
|
||||
Logger::deleteInstance();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -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
|
||||
}
|
||||
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user