From ce45fbdefd91f0303ac8772d72529af3c9254584 Mon Sep 17 00:00:00 2001 From: Luigi Lavitola Date: Wed, 26 Aug 2026 17:50:24 +0200 Subject: [PATCH 1/3] Fix 32-bit time_t overflow in SendLog/SendMonitoringData default timestamp time_t ts = time(nullptr)*1000 overflows on platforms with a 32-bit time_t (e.g. armhf), landing the timestamp in January 1970 instead of now. Widen ts to uint64_t (matching LogMsg/MonitoringMsg's own field type) and compute the fallback via std::chrono, which isn't tied to time_t's width. --- src/ServiceDiscovery/Services.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ServiceDiscovery/Services.cpp b/src/ServiceDiscovery/Services.cpp index cec329de..647e6bc8 100644 --- a/src/ServiceDiscovery/Services.cpp +++ b/src/ServiceDiscovery/Services.cpp @@ -992,7 +992,7 @@ bool Services::SendLog(const std::string& message, LogLevel severity, const std: } // grab timestamp at time of call if 0 - time_t ts = (timestamp!=0) ? timestamp : time(nullptr)*1000; + uint64_t ts = (timestamp!=0) ? timestamp : std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(); logging_buf.emplace_back(message, severity, name, ts); @@ -1023,7 +1023,7 @@ bool Services::SendMonitoringData(const std::string& json_data, const std::strin } // grab timestamp at time of call if 0 - time_t ts = (timestamp!=0) ? timestamp : time(nullptr)*1000; + uint64_t ts = (timestamp!=0) ? timestamp : std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(); std::unique_lock locker(monitoring_buf_mtx); From c34920c6bb8f0aae513a5ec2574779dafd629a35 Mon Sep 17 00:00:00 2001 From: Luigi Lavitola Date: Wed, 26 Aug 2026 19:28:42 +0200 Subject: [PATCH 2/3] Add temporary debug print in TimeStringFromUnixMs to diagnose the 1970 timestamp bug --- src/ServiceDiscovery/Services.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/ServiceDiscovery/Services.cpp b/src/ServiceDiscovery/Services.cpp index 647e6bc8..ec5c3606 100644 --- a/src/ServiceDiscovery/Services.cpp +++ b/src/ServiceDiscovery/Services.cpp @@ -1138,9 +1138,12 @@ std::string Services::GetDeviceName(){ // ««-------------- ≪ °◇◆◇° ≫ --------------»» std::string Services::TimeStringFromUnixMs(uint64_t& timestamp){ - + + fprintf(stderr, "TimeStringFromUnixMs: received timestamp=%llu (sizeof(time_t)=%zu)\n", + (unsigned long long)timestamp, sizeof(time_t)); + if(timestamp==1) return "now()"; // remotely interpret 'now' - + time_t timestamp_sec; // time_t is equivalent to uint64_t uint16_t timestamp_ms; if(timestamp==0){ From 3e0d6e3ca4db97cb5c07bd62e77c33a7760a2f16 Mon Sep 17 00:00:00 2001 From: Luigi Lavitola Date: Wed, 26 Aug 2026 19:40:29 +0200 Subject: [PATCH 3/3] Remove temporary debug print from TimeStringFromUnixMs - diagnosis done, bug was a stale lib/libToolDAQ.so in m-pmt-daq-interface, not this function --- src/ServiceDiscovery/Services.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/ServiceDiscovery/Services.cpp b/src/ServiceDiscovery/Services.cpp index ec5c3606..9b9ee3ff 100644 --- a/src/ServiceDiscovery/Services.cpp +++ b/src/ServiceDiscovery/Services.cpp @@ -1139,9 +1139,6 @@ std::string Services::GetDeviceName(){ std::string Services::TimeStringFromUnixMs(uint64_t& timestamp){ - fprintf(stderr, "TimeStringFromUnixMs: received timestamp=%llu (sizeof(time_t)=%zu)\n", - (unsigned long long)timestamp, sizeof(time_t)); - if(timestamp==1) return "now()"; // remotely interpret 'now' time_t timestamp_sec; // time_t is equivalent to uint64_t