From 221713533650b6af95412ba0360c7d25ee7954fb Mon Sep 17 00:00:00 2001 From: LordGrey <48840279+Lord-Grey@users.noreply.github.com> Date: Mon, 19 Dec 2022 14:04:35 +0100 Subject: [PATCH] Fixing outstanding issues (#1537) * Correct stopEnableAttemptsTimer thread affinity * Restart correctly, if running as service * Add instance# in API response * Qt6 updates * Update fallthrough guide * Update Compile warning --- include/utils/ColorRgb.h | 1 + include/utils/Process.h | 2 +- libsrc/api/JsonAPI.cpp | 8 ++++---- libsrc/api/JsonCB.cpp | 1 + .../video/mediafoundation/MFGrabber.cpp | 2 +- libsrc/leddevice/LedDevice.cpp | 3 +-- .../dev_serial/LedDeviceAdalight.cpp | 4 ++-- libsrc/utils/Process.cpp | 20 +++++++++++++------ src/hyperiond/systray.cpp | 2 +- 9 files changed, 26 insertions(+), 17 deletions(-) diff --git a/include/utils/ColorRgb.h b/include/utils/ColorRgb.h index ae4d3145..901b000c 100644 --- a/include/utils/ColorRgb.h +++ b/include/utils/ColorRgb.h @@ -4,6 +4,7 @@ #include #include +#include #include /// diff --git a/include/utils/Process.h b/include/utils/Process.h index fcd06a4d..f8da8e65 100644 --- a/include/utils/Process.h +++ b/include/utils/Process.h @@ -5,7 +5,7 @@ namespace Process { -void restartHyperion(bool asNewProcess=false); +void restartHyperion(int exitCode = 0); QByteArray command_exec(const QString& cmd, const QByteArray& data = {}); } diff --git a/libsrc/api/JsonAPI.cpp b/libsrc/api/JsonAPI.cpp index dfb47440..6819ab8e 100644 --- a/libsrc/api/JsonAPI.cpp +++ b/libsrc/api/JsonAPI.cpp @@ -990,7 +990,7 @@ void JsonAPI::handleConfigCommand(const QJsonObject &message, const QString &com { Debug(_log, "Restarting due to RPC command"); - Process::restartHyperion(); + Process::restartHyperion(10); sendSuccessReply(command + "-" + subcommand, tan); } @@ -1425,7 +1425,7 @@ void JsonAPI::handleAuthorizeCommand(const QJsonObject &message, const QString & if (!token.isEmpty()) { // userToken is longer - if (token.count() > 36) + if (token.size() > 36) { if (API::isUserTokenAuthorized(token)) sendSuccessReply(command + "-" + subc, tan); @@ -1435,7 +1435,7 @@ void JsonAPI::handleAuthorizeCommand(const QJsonObject &message, const QString & return; } // usual app token is 36 - if (token.count() == 36) + if (token.size() == 36) { if (API::isTokenAuthorized(token)) { @@ -1449,7 +1449,7 @@ void JsonAPI::handleAuthorizeCommand(const QJsonObject &message, const QString & // password // use password - if (password.count() >= 8) + if (password.size() >= 8) { QString userTokenRep; if (API::isUserAuthorized(password) && API::getUserToken(userTokenRep)) diff --git a/libsrc/api/JsonCB.cpp b/libsrc/api/JsonCB.cpp index 23d1c7dc..5c35b77b 100644 --- a/libsrc/api/JsonCB.cpp +++ b/libsrc/api/JsonCB.cpp @@ -171,6 +171,7 @@ void JsonCB::setSubscriptionsTo(Hyperion* hyperion) void JsonCB::doCallback(const QString& cmd, const QVariant& data) { QJsonObject obj; + obj["instance"] = _hyperion->getInstanceIndex(); obj["command"] = cmd; if (data.userType() == QMetaType::QJsonArray) diff --git a/libsrc/grabber/video/mediafoundation/MFGrabber.cpp b/libsrc/grabber/video/mediafoundation/MFGrabber.cpp index aa017d8d..5e67e6ef 100644 --- a/libsrc/grabber/video/mediafoundation/MFGrabber.cpp +++ b/libsrc/grabber/video/mediafoundation/MFGrabber.cpp @@ -537,7 +537,7 @@ void MFGrabber::process_image(const void *frameImageBuffer, int size) Error(_log, "Frame too small: %d != %d", size, _frameByteSize); else if (_threadManager != nullptr) { - for (int i = 0; i < _threadManager->_threadCount; i++) + for (unsigned long i = 0; i < _threadManager->_threadCount; i++) { if (!_threadManager->_threads[i]->isBusy()) { diff --git a/libsrc/leddevice/LedDevice.cpp b/libsrc/leddevice/LedDevice.cpp index 7d5fd05d..6e1796d9 100644 --- a/libsrc/leddevice/LedDevice.cpp +++ b/libsrc/leddevice/LedDevice.cpp @@ -67,8 +67,6 @@ LedDevice::LedDevice(const QJsonObject& deviceConfig, QObject* parent) LedDevice::~LedDevice() { - this->stopEnableAttemptsTimer(); - this->stopRefreshTimer(); } void LedDevice::start() @@ -97,6 +95,7 @@ void LedDevice::start() void LedDevice::stop() { Debug(_log, "Stop device"); + this->stopEnableAttemptsTimer(); this->disable(); this->stopRefreshTimer(); Info(_log, " Stopped LedDevice '%s'", QSTRING_CSTR(_activeDeviceType)); diff --git a/libsrc/leddevice/dev_serial/LedDeviceAdalight.cpp b/libsrc/leddevice/dev_serial/LedDeviceAdalight.cpp index 1fdc11b3..d3b9dcce 100644 --- a/libsrc/leddevice/dev_serial/LedDeviceAdalight.cpp +++ b/libsrc/leddevice/dev_serial/LedDeviceAdalight.cpp @@ -95,9 +95,9 @@ void LedDeviceAdalight::prepareHeader() case Adalight::AWA: _bufferLength += 7; - [[clang::fallthrough]]; + [[fallthrough]]; case Adalight::ADA: - [[clang::fallthrough]]; + [[fallthrough]]; default: totalLedCount -= 1; _ledBuffer.resize(static_cast(_bufferLength), 0x00); diff --git a/libsrc/utils/Process.cpp b/libsrc/utils/Process.cpp index 232ef6a3..9fdd7264 100644 --- a/libsrc/utils/Process.cpp +++ b/libsrc/utils/Process.cpp @@ -7,7 +7,7 @@ namespace Process { -void restartHyperion(bool asNewProcess) +void restartHyperion(int exitCode) { Logger* log = Logger::getInstance("Process"); Info(log, "Restarting hyperion ..."); @@ -18,7 +18,8 @@ void restartHyperion(bool asNewProcess) QProcess::startDetached(QCoreApplication::applicationFilePath(), arguments); - QCoreApplication::quit(); + //Exit with non-zero code to ensure service deamon restarts hyperion + QCoreApplication::exit(exitCode); } QByteArray command_exec(const QString& /*cmd*/, const QByteArray& /*data*/) @@ -42,9 +43,15 @@ QByteArray command_exec(const QString& /*cmd*/, const QByteArray& /*data*/) #include #include +#include + +#include +#include + namespace Process { -void restartHyperion(bool asNewProcess) + +void restartHyperion(int exitCode) { Logger* log = Logger::getInstance("Process"); Info(log, "Restarting hyperion ..."); @@ -60,10 +67,11 @@ void restartHyperion(bool asNewProcess) QProcess::startDetached(QCoreApplication::applicationFilePath(), arguments); - QCoreApplication::quit(); + //Exit with non-zero code to ensure service deamon restarts hyperion + QCoreApplication::exit(exitCode); } -QByteArray command_exec(const QString& cmd, const QByteArray& data) +QByteArray command_exec(const QString& cmd, const QByteArray& /*data*/) { char buffer[128]; QString result; @@ -73,7 +81,7 @@ QByteArray command_exec(const QString& cmd, const QByteArray& data) { while (!feof(pipe.get())) { - if (fgets(buffer, 128, pipe.get()) != NULL) + if (fgets(buffer, 128, pipe.get()) != nullptr) result += buffer; } } diff --git a/src/hyperiond/systray.cpp b/src/hyperiond/systray.cpp index f8d44c49..af7df88c 100644 --- a/src/hyperiond/systray.cpp +++ b/src/hyperiond/systray.cpp @@ -79,7 +79,7 @@ void SysTray::createTrayIcon() restartAction = new QAction(tr("&Restart"), this); restartAction->setIcon(QPixmap(":/restart.svg")); - connect(restartAction, &QAction::triggered, this , [=](){ Process::restartHyperion(); }); + connect(restartAction, &QAction::triggered, this , [=](){ Process::restartHyperion(11); }); colorAction = new QAction(tr("&Color"), this); colorAction->setIcon(QPixmap(":/color.svg"));