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:
@@ -159,10 +159,8 @@ void ImageResampler::processImage(const uint8_t * data, int width, int height, i
|
||||
break;
|
||||
}
|
||||
break;
|
||||
#ifdef HAVE_TURBO_JPEG
|
||||
case PixelFormat::MJPEG:
|
||||
break;
|
||||
#endif
|
||||
case PixelFormat::NO_CHANGE:
|
||||
Error(Logger::getInstance("ImageResampler"), "Invalid pixel format given");
|
||||
break;
|
||||
|
@@ -2,7 +2,6 @@
|
||||
#include <utils/FileUtils.h>
|
||||
|
||||
#include <iostream>
|
||||
#include <algorithm>
|
||||
|
||||
#ifndef _WIN32
|
||||
#include <syslog.h>
|
||||
@@ -15,7 +14,8 @@
|
||||
#include <QFileInfo>
|
||||
#include <QMutexLocker>
|
||||
#include <QThreadStorage>
|
||||
#include <time.h>
|
||||
#include <QJsonObject>
|
||||
|
||||
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
|
||||
QRecursiveMutex Logger::MapLock;
|
||||
@@ -38,6 +38,7 @@ const size_t MAX_IDENTIFICATION_LENGTH = 22;
|
||||
QAtomicInteger<unsigned int> LoggerCount = 0;
|
||||
QAtomicInteger<unsigned int> LoggerId = 0;
|
||||
|
||||
const int MAX_LOG_MSG_BUFFERED = 500;
|
||||
const int MaxRepeatCountSize = 200;
|
||||
QThreadStorage<int> RepeatCount;
|
||||
QThreadStorage<Logger::T_LOG_MESSAGE> RepeatMessage;
|
||||
@@ -51,8 +52,7 @@ Logger* Logger::getInstance(const QString & name, const QString & subName, Logge
|
||||
if (log == nullptr)
|
||||
{
|
||||
log = new Logger(name, subName, minLevel);
|
||||
LoggerMap.insert(name, log); // compat version, replace it with following line if we have 100% c++11
|
||||
//LoggerMap.emplace(name, log); // not compat with older linux distro's e.g. wheezy
|
||||
LoggerMap.insert(name + subName, log);
|
||||
connect(log, &Logger::newLogMessage, LoggerManager::getInstance(), &LoggerManager::handleNewLogMessage);
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ Logger::LogLevel Logger::getLogLevel(const QString & name, const QString & subNa
|
||||
Logger::Logger (const QString & name, const QString & subName, LogLevel minLevel)
|
||||
: QObject()
|
||||
, _name(name)
|
||||
, _subname(subName)
|
||||
, _subName(subName)
|
||||
, _syslogEnabled(true)
|
||||
, _loggerId(LoggerId++)
|
||||
, _minLevel(static_cast<int>(minLevel))
|
||||
@@ -161,7 +161,7 @@ void Logger::write(const Logger::T_LOG_MESSAGE & message)
|
||||
.toStdString()
|
||||
<< std::endl;
|
||||
|
||||
newLogMessage(message);
|
||||
emit newLogMessage(message);
|
||||
}
|
||||
|
||||
void Logger::Message(LogLevel level, const char* sourceFile, const char* func, unsigned int line, const char* fmt, ...)
|
||||
@@ -195,7 +195,7 @@ void Logger::Message(LogLevel level, const char* sourceFile, const char* func, u
|
||||
};
|
||||
|
||||
if (RepeatMessage.localData().loggerName == _name &&
|
||||
RepeatMessage.localData().loggerSubName == _subname &&
|
||||
RepeatMessage.localData().loggerSubName == _subName &&
|
||||
RepeatMessage.localData().function == func &&
|
||||
RepeatMessage.localData().message == msg &&
|
||||
RepeatMessage.localData().line == line)
|
||||
@@ -213,7 +213,7 @@ void Logger::Message(LogLevel level, const char* sourceFile, const char* func, u
|
||||
Logger::T_LOG_MESSAGE logMsg;
|
||||
|
||||
logMsg.loggerName = _name;
|
||||
logMsg.loggerSubName = _subname;
|
||||
logMsg.loggerSubName = _subName;
|
||||
logMsg.function = QString(func);
|
||||
logMsg.line = line;
|
||||
logMsg.fileName = FileUtils::getBaseName(sourceFile);
|
||||
@@ -233,11 +233,36 @@ void Logger::Message(LogLevel level, const char* sourceFile, const char* func, u
|
||||
|
||||
LoggerManager::LoggerManager()
|
||||
: QObject()
|
||||
, _loggerMaxMsgBufferSize(200)
|
||||
, _loggerMaxMsgBufferSize(MAX_LOG_MSG_BUFFERED)
|
||||
{
|
||||
_logMessageBuffer.reserve(_loggerMaxMsgBufferSize);
|
||||
}
|
||||
|
||||
QJsonArray LoggerManager::getLogMessageBuffer(Logger::LogLevel filter) const
|
||||
{
|
||||
QJsonArray messageArray;
|
||||
{
|
||||
for (const auto &logLine : std::as_const(_logMessageBuffer))
|
||||
{
|
||||
if (logLine.level >= filter)
|
||||
{
|
||||
QJsonObject message;
|
||||
message["loggerName"] = logLine.loggerName;
|
||||
message["loggerSubName"] = logLine.loggerSubName;
|
||||
message["function"] = logLine.function;
|
||||
message["line"] = QString::number(logLine.line);
|
||||
message["fileName"] = logLine.fileName;
|
||||
message["message"] = logLine.message;
|
||||
message["levelString"] = logLine.levelString;
|
||||
message["utime"] = QString::number(logLine.utime);
|
||||
|
||||
messageArray.append(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
return messageArray;
|
||||
}
|
||||
|
||||
void LoggerManager::handleNewLogMessage(const Logger::T_LOG_MESSAGE & msg)
|
||||
{
|
||||
_logMessageBuffer.push_back(msg);
|
||||
|
@@ -1,16 +1,14 @@
|
||||
#include <utils/RgbChannelAdjustment.h>
|
||||
|
||||
RgbChannelAdjustment::RgbChannelAdjustment(QString channelName)
|
||||
: _channelName(channelName)
|
||||
, _log(Logger::getInstance(channelName))
|
||||
, _brightness(0)
|
||||
: RgbChannelAdjustment(0, 0, 0, channelName)
|
||||
{
|
||||
resetInitialized();
|
||||
}
|
||||
|
||||
RgbChannelAdjustment::RgbChannelAdjustment(uint8_t adjustR, uint8_t adjustG, uint8_t adjustB, QString channelName)
|
||||
RgbChannelAdjustment::RgbChannelAdjustment(uint8_t adjustR, uint8_t adjustG, uint8_t adjustB, QString channelName )
|
||||
: _channelName(channelName)
|
||||
, _log(Logger::getInstance(channelName))
|
||||
, _log(Logger::getInstance("CHANNEL_" + channelName.toUpper()))
|
||||
, _brightness(0)
|
||||
{
|
||||
setAdjustment(adjustR, adjustG, adjustB);
|
||||
}
|
||||
|
@@ -2,13 +2,15 @@
|
||||
#include <utils/RgbTransform.h>
|
||||
|
||||
RgbTransform::RgbTransform()
|
||||
: RgbTransform::RgbTransform(1.0, 1.0, 1.0, 0.0, false, 100, 100)
|
||||
{
|
||||
init(1.0, 1.0, 1.0, 0.0, false, 100, 100);
|
||||
}
|
||||
|
||||
RgbTransform::RgbTransform(double gammaR, double gammaG, double gammaB, double backlightThreshold, bool backlightColored, uint8_t brightness, uint8_t brightnessCompensation)
|
||||
: _brightness(brightness)
|
||||
, _brightnessCompensation(brightnessCompensation)
|
||||
{
|
||||
init(gammaR, gammaG, gammaB, backlightThreshold, backlightColored, brightness, brightnessCompensation);
|
||||
init(gammaR, gammaG, gammaB, backlightThreshold, backlightColored, _brightness, _brightnessCompensation);
|
||||
}
|
||||
|
||||
void RgbTransform::init(double gammaR, double gammaG, double gammaB, double backlightThreshold, bool backlightColored, uint8_t brightness, uint8_t brightnessCompensation)
|
||||
|
Reference in New Issue
Block a user