From 97f040cefd4fdc60ba358aae3efbcac8ed6a7f79 Mon Sep 17 00:00:00 2001 From: Siddarth Tegginamani Date: Wed, 10 Nov 2021 13:03:27 +0100 Subject: [PATCH] Added global config value with unix time of system boot, for system-wide consistent time calculations --- lib/util.h | 1 + src/controller/controller_storage.cpp | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/lib/util.h b/lib/util.h index edfc9442..af77abf2 100644 --- a/lib/util.h +++ b/lib/util.h @@ -203,6 +203,7 @@ namespace Util{ const char * ptr(size_t recordNo) const; void set(uint64_t val, size_t recordNo = 0); void set(const std::string &val, size_t recordNo = 0); + operator bool() const {return src;} private: RelAccX *src; diff --git a/src/controller/controller_storage.cpp b/src/controller/controller_storage.cpp index b78d29ec..997d9ac7 100644 --- a/src/controller/controller_storage.cpp +++ b/src/controller/controller_storage.cpp @@ -33,6 +33,7 @@ namespace Controller{ Util::RelAccX *rlxAccs = 0; IPC::sharedPage *shmStrm = 0; Util::RelAccX *rlxStrm = 0; + uint64_t systemBoot = Util::unixMS() - Util::bootMS(); Util::RelAccX *logAccessor(){return rlxLogs;} @@ -422,13 +423,30 @@ namespace Controller{ if (!globCfg.mapped){globCfg.init(SHM_GLOBAL_CONF, 4096, true, false);} if (globCfg.mapped){ Util::RelAccX globAccX(globCfg.mapped, false); + + // if fields missing, recreate the page + if (globAccX.isReady()){ + if(globAccX.getFieldAccX("systemBoot")){ + systemBoot = globAccX.getInt("systemBoot"); + } + if(!globAccX.getFieldAccX("defaultStream") + || !globAccX.getFieldAccX("systemBoot")){ + globAccX.setReload(); + globCfg.master = true; + globCfg.close(); + globCfg.init(SHM_GLOBAL_CONF, 4096, true, false); + globAccX = Util::RelAccX(globCfg.mapped, false); + } + } if (!globAccX.isReady()){ globAccX.addField("defaultStream", RAX_128STRING); + globAccX.addField("systemBoot", RAX_64UINT); globAccX.setRCount(1); globAccX.setEndPos(1); globAccX.setReady(); } globAccX.setString("defaultStream", Storage["config"]["defaultStream"].asStringRef()); + globAccX.setInt("systemBoot", systemBoot); globCfg.master = false; // leave the page after closing } }