diff --git a/src/main.cpp b/src/main.cpp index 4eda40c..16acb4a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -95,8 +95,12 @@ class ServerResources { } } - static void doTerminalUpgrade() { - system(UPGRADE_COMMAND); + void doTerminalUpgrade() const { + api->executeInApi([](TSID sid) { + CP_SetDmaDebug(sid, "begin_save_config", ""); + system(UPGRADE_COMMAND); + CP_SetDmaDebug(sid, "save_config", ""); + }); } public: diff --git a/src/terminal_api_driver.cpp b/src/terminal_api_driver.cpp index 63a3185..367a57d 100644 --- a/src/terminal_api_driver.cpp +++ b/src/terminal_api_driver.cpp @@ -100,8 +100,6 @@ public: */ class api_driver::TerminalApiDaemon { private: - TSID sid; - boost::thread daemon; void updateFirmwareSettings() { std::string version, chip_id, sn, mac0, mac1; @@ -286,8 +284,6 @@ private: } } - std::mutex cpApiMutex; - std::shared_mutex firmwareMutex; TerminalFirmwareVersion firmware; @@ -311,6 +307,10 @@ private: std::string qosClassesJson; public: + std::mutex cpApiMutex; + TSID sid; + boost::thread daemon; + explicit TerminalApiDaemon(TSID sid): sid(sid), daemon([this]() { this->run(); }), qosEnabled(false) { this->qosClassesJson = DEFAULT_QOS_CLASSES; } @@ -892,6 +892,15 @@ void api_driver::ApiDriver::resetDefaultSettings() { daemon->resetDefaultSettings(); } +void api_driver::ApiDriver::executeInApi(const std::function& callback) { + try { + std::lock_guard lock(this->daemon->cpApiMutex); + callback(this->daemon->sid); + } catch (std::exception& e) { + BOOST_LOG_TRIVIAL(error) << "ApiDriver::executeInApi(): failed to exec with error: " << e.what(); + } +} + bool api_driver::ApiDriver::getIsCinC() const { modulator_settings s{}; daemon->getSettings(&s, nullptr, nullptr, nullptr, nullptr); diff --git a/src/terminal_api_driver.h b/src/terminal_api_driver.h index 60db10a..15d4706 100644 --- a/src/terminal_api_driver.h +++ b/src/terminal_api_driver.h @@ -67,6 +67,8 @@ namespace api_driver { void resetDefaultSettings(); + void executeInApi(const std::function& callback); + ~ApiDriver(); private: