M module-services/service-db/ServiceDBCommon.cpp => module-services/service-db/ServiceDBCommon.cpp +3 -0
@@ 67,6 67,9 @@ sys::ReturnCodes ServiceDBCommon::DeinitHandler()
void ServiceDBCommon::ProcessCloseReason(sys::CloseReason closeReason)
{
if (closeReason == sys::CloseReason::FactoryReset) {
+ for (auto &dbAgent : databaseAgents) {
+ dbAgent->unRegisterMessages();
+ }
factoryReset();
}
sendCloseReadyMessage(this);
M module-services/service-db/agents/settings/SettingsAgent.cpp => module-services/service-db/agents/settings/SettingsAgent.cpp +8 -0
@@ 67,6 67,14 @@ void SettingsAgent::registerMessages()
std::bind(&SettingsAgent::handleUnregisterOnVariableChange, this, _1));
}
+void SettingsAgent::unRegisterMessages()
+{
+ parentService->disconnect(typeid(settings::Messages::GetVariable));
+ parentService->disconnect(typeid(settings::Messages::SetVariable));
+ parentService->disconnect(typeid(settings::Messages::RegisterOnVariableChange));
+ parentService->disconnect(typeid(settings::Messages::UnregisterOnVariableChange));
+}
+
auto SettingsAgent::getDbInitString() -> const std::string
{
return {};
M module-services/service-db/agents/settings/SettingsAgent.hpp => module-services/service-db/agents/settings/SettingsAgent.hpp +1 -0
@@ 32,6 32,7 @@ class SettingsAgent : public DatabaseAgent
void initDb() override;
void deinitDb() override;
void registerMessages() override;
+ void unRegisterMessages() override;
auto getAgentName() -> const std::string override;
auto getDbFilePath() -> const std::string override;
M module-services/service-db/include/service-db/DatabaseAgent.hpp => module-services/service-db/include/service-db/DatabaseAgent.hpp +1 -0
@@ 24,6 24,7 @@ class DatabaseAgent
virtual void initDb() = 0;
virtual void deinitDb() = 0;
virtual void registerMessages() = 0;
+ virtual void unRegisterMessages() = 0;
[[nodiscard]] virtual auto getAgentName() -> const std::string = 0;
bool storeIntoFile(const std::filesystem::path &file)
{
M module-services/service-desktop/ServiceDesktop.cpp => module-services/service-desktop/ServiceDesktop.cpp +2 -2
@@ 224,7 224,7 @@ sys::ReturnCodes ServiceDesktop::InitHandler()
sys::ReturnCodes ServiceDesktop::DeinitHandler()
{
- LOG_ERROR(".. deinit ..");
+ LOG_DEBUG(".. deinit ..");
if (initialized) {
settings->deinit();
desktopWorker->deinit();
@@ 234,7 234,7 @@ sys::ReturnCodes ServiceDesktop::DeinitHandler()
void ServiceDesktop::ProcessCloseReason(sys::CloseReason closeReason)
{
- LOG_ERROR(".. close with reason ..");
+ LOG_DEBUG(".. close with reason ..");
DeinitHandler();
sendCloseReadyMessage(this);
}
M module-sys/SystemManager/SystemManagerCommon.cpp => module-sys/SystemManager/SystemManagerCommon.cpp +2 -4
@@ 147,12 147,10 @@ namespace sys
LOG_INFO(" ---> REBOOT <--- ");
powerManager->Reboot();
break;
- case State::ShutdownReady: {
+ case State::ShutdownReady:
LOG_INFO(" ---> SHUTDOWN <--- ");
powerManager->PowerOff();
- }
-
- break;
+ break;
case State::RebootToUpdate:
LOG_INFO(" ---> REBOOT TO UPDATER <--- ");
powerManager->RebootToUpdate(updateReason);
M products/PurePhone/services/service-fileindexer/ServiceFileIndexer.cpp => products/PurePhone/services/service-fileindexer/ServiceFileIndexer.cpp +8 -0
@@ 53,4 53,12 @@ namespace service
LOG_DEBUG("Switch to power Mode %s", c_str(mode));
return sys::ReturnCodes::Success;
}
+
+ void ServiceFileIndexer::ProcessCloseReason(sys::CloseReason closeReason)
+ {
+ if (closeReason == sys::CloseReason::FactoryReset) {
+ mStartupIndexer.reset();
+ }
+ sendCloseReadyMessage(this);
+ }
} // namespace service
M products/PurePhone/services/service-fileindexer/StartupIndexer.cpp => products/PurePhone/services/service-fileindexer/StartupIndexer.cpp +24 -2
@@ 51,6 51,9 @@ namespace service::detail
// On timer timeout
auto StartupIndexer::onTimerTimeout(std::shared_ptr<sys::Service> svc) -> void
{
+ if (mForceStop) {
+ return;
+ }
if (!mStarted) {
mIdxTimer.restart(std::chrono::milliseconds{timer_indexing_delay});
mStarted = true;
@@ 89,23 92,42 @@ namespace service::detail
LOG_INFO("Initial startup indexer - Started...");
mTopDirIterator = std::begin(start_dirs);
setupTimers(svc, svc_name);
+ mForceStop = false;
}
else {
LOG_INFO("Initial startup indexer - Not needed...");
}
}
- // Create lock file
+ void StartupIndexer::reset()
+ {
+ mForceStop = true;
+ mIdxTimer.stop();
+ removeLockFile();
+ }
+
auto StartupIndexer::createLockFile() -> bool
{
std::ofstream ofs(lock_file_name);
ofs << time(nullptr);
return ofs.good();
}
- // Check if lock file exists
+
auto StartupIndexer::hasLockFile() -> bool
{
std::error_code ec;
return fs::is_regular_file(lock_file_name, ec);
}
+
+ auto StartupIndexer::removeLockFile() -> bool
+ {
+ if (hasLockFile()) {
+ std::error_code ec;
+ if (!remove(lock_file_name, ec)) {
+ LOG_ERROR("Failed to remove lock file, error: %d", ec.value());
+ return false;
+ }
+ }
+ return true;
+ }
} // namespace service::detail
M products/PurePhone/services/service-fileindexer/include/service-fileindexer/ServiceFileIndexer.hpp => products/PurePhone/services/service-fileindexer/include/service-fileindexer/ServiceFileIndexer.hpp +1 -0
@@ 23,6 23,7 @@ namespace service
sys::ReturnCodes InitHandler() override;
sys::ReturnCodes DeinitHandler() override;
sys::ReturnCodes SwitchPowerModeHandler(const sys::ServicePowerMode mode) override;
+ void ProcessCloseReason(sys::CloseReason closeReason) override;
private:
detail::InotifyHandler mInotifyHandler;
M products/PurePhone/services/service-fileindexer/include/service-fileindexer/StartupIndexer.hpp => products/PurePhone/services/service-fileindexer/include/service-fileindexer/StartupIndexer.hpp +4 -0
@@ 18,6 18,7 @@ namespace service::detail
StartupIndexer(const StartupIndexer &) = delete;
StartupIndexer &operator=(StartupIndexer) = delete;
auto start(std::shared_ptr<sys::Service> svc, std::string_view svc_name) -> void;
+ void reset();
private:
// Process single entry
@@ 31,11 32,14 @@ namespace service::detail
static auto createLockFile() -> bool;
// Check if lock file exists
static auto hasLockFile() -> bool;
+ // remove lock file exists
+ static auto removeLockFile() -> bool;
private:
std::vector<std::string>::const_iterator mTopDirIterator;
std::filesystem::recursive_directory_iterator mSubDirIterator;
sys::TimerHandle mIdxTimer;
bool mStarted{};
+ bool mForceStop{};
};
} // namespace service::detail