diff --git a/GaudiAud/src/ProcStats.cpp b/GaudiAud/src/ProcStats.cpp
index cb05b3c7f436c6473714e22ff33605d1fef70688..952f93314ec1af337695c22958ec707ae903c035 100644
--- a/GaudiAud/src/ProcStats.cpp
+++ b/GaudiAud/src/ProcStats.cpp
@@ -198,41 +198,41 @@
              (divide by sysconf(_SC_CLK_TCK).
 */
 struct linux_proc {
-  int                pid;
+  int                pid{-1};
   char               comm[400];
   char               state;
-  int                ppid;
-  int                pgrp;
-  int                session;
-  int                tty;
-  int                tpgid;
-  unsigned long      flags;
-  unsigned long      minflt;
-  unsigned long      cminflt;
-  unsigned long      majflt;
-  unsigned long      cmajflt;
-  unsigned long      utime;
-  unsigned long      stime;
-  long               cutime;
-  long               cstime;
-  long               priority;
-  long               nice;
-  long               num_threads;
-  long               itrealvalue;
-  unsigned long long starttime;
-  unsigned long      vsize;
-  long               rss;
-  unsigned long      rlim;
-  unsigned long      startcode;
-  unsigned long      endcode;
-  unsigned long      startstack;
-  unsigned long      kstkesp;
-  unsigned long      kstkeip;
-  unsigned long      signal;
-  unsigned long      blocked;
-  unsigned long      sigignore;
-  unsigned long      sigcatch;
-  unsigned long      wchan;
+  int                ppid{-1};
+  int                pgrp{-1};
+  int                session{-1};
+  int                tty{-1};
+  int                tpgid{-1};
+  unsigned long      flags{0};
+  unsigned long      minflt{0};
+  unsigned long      cminflt{0};
+  unsigned long      majflt{0};
+  unsigned long      cmajflt{0};
+  unsigned long      utime{0};
+  unsigned long      stime{0};
+  long               cutime{0};
+  long               cstime{0};
+  long               priority{0};
+  long               nice{0};
+  long               num_threads{0};
+  long               itrealvalue{0};
+  unsigned long long starttime{0};
+  unsigned long      vsize{0};
+  long               rss{0};
+  unsigned long      rlim{0};
+  unsigned long      startcode{0};
+  unsigned long      endcode{0};
+  unsigned long      startstack{0};
+  unsigned long      kstkesp{0};
+  unsigned long      kstkeip{0};
+  unsigned long      signal{0};
+  unsigned long      blocked{0};
+  unsigned long      sigignore{0};
+  unsigned long      sigcatch{0};
+  unsigned long      wchan{0};
 };
 #endif // __linux__ or __APPLE__
 
@@ -259,48 +259,47 @@ void ProcStats::open_ufd() {
 bool ProcStats::fetch( procInfo& f ) {
   if ( !m_valid ) { return false; }
 
-  std::scoped_lock lock{ m_mutex };
+  std::scoped_lock lock{m_mutex};
 
 #if defined( __linux__ ) or defined( __APPLE__ )
 
-  double     pr_size{ 0 }, pr_rssize{ 0 };
-  linux_proc pinfo;
-  int        cnt{ 0 };
-  char       buf[500];
-
-  m_ufd.lseek( 0, SEEK_SET );
-
-  if ( ( cnt = m_ufd.read( buf, sizeof( buf ) ) ) < 0 ) {
-    std::cerr << "ProcStats : LINUX Read of Proc file failed:" << std::endl;
-    return false;
-  }
-
-  if ( cnt > 0 ) {
-    buf[std::min( static_cast<std::size_t>( cnt ), sizeof( buf ) - 1 )] = '\0';
-
-    sscanf( buf,
-            // 1  2  3  4  5  6  7  8  9  10  1   2   3   4   5   6   7   8   9   20  1   2   3   4   5   6   7   8   9
-            // 30  1   2   3   4   5
-            "%d %s %c %d %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %ld %ld %ld %ld %ld %ld %llu %lu %ld %lu %lu %lu %lu "
-            "%lu %lu %lu %lu %lu %lu %lu",
-            &pinfo.pid, pinfo.comm, &pinfo.state, &pinfo.ppid, &pinfo.pgrp, &pinfo.session, &pinfo.tty, &pinfo.tpgid,
-            &pinfo.flags, &pinfo.minflt, &pinfo.cminflt, &pinfo.majflt, &pinfo.cmajflt, &pinfo.utime, &pinfo.stime,
-            &pinfo.cutime, &pinfo.cstime, &pinfo.priority, &pinfo.nice, &pinfo.num_threads, &pinfo.itrealvalue,
-            &pinfo.starttime, &pinfo.vsize, &pinfo.rss, &pinfo.rlim, &pinfo.startcode, &pinfo.endcode,
-            &pinfo.startstack, &pinfo.kstkesp, &pinfo.kstkeip, &pinfo.signal, &pinfo.blocked, &pinfo.sigignore,
-            &pinfo.sigcatch, &pinfo.wchan );
-
-    // resident set size in pages
-    pr_size   = (double)pinfo.vsize;
-    pr_rssize = (double)pinfo.rss;
-
-    f.vsize = pr_size / ( 1024 * 1024 );
-    f.rss   = pr_rssize * m_pg_size / ( 1024 * 1024 );
-
-    if ( 0 == pinfo.vsize ) {
-      std::cerr << "ProcStats : 0==vsize -> Will try reopening process proc stats" << std::endl;
-      open_ufd();
+  auto read_proc = [&]() {
+    bool       ok = true;
+    int        cnt{0};
+    char       buf[500];
+    linux_proc pinfo;
+    m_ufd.lseek( 0, SEEK_SET );
+    if ( ( cnt = m_ufd.read( buf, sizeof( buf ) ) ) < 0 ) { ok = false; }
+    if ( cnt > 0 ) {
+      buf[std::min( static_cast<std::size_t>( cnt ), sizeof( buf ) - 1 )] = '\0';
+      sscanf(
+          buf,
+          // 1  2  3  4  5  6  7  8  9  10  1   2   3   4   5   6   7   8   9   20  1   2   3   4   5   6   7   8   9
+          // 30  1   2   3   4   5
+          "%d %s %c %d %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %ld %ld %ld %ld %ld %ld %llu %lu %ld %lu %lu %lu %lu "
+          "%lu %lu %lu %lu %lu %lu %lu",
+          &pinfo.pid, pinfo.comm, &pinfo.state, &pinfo.ppid, &pinfo.pgrp, &pinfo.session, &pinfo.tty, &pinfo.tpgid,
+          &pinfo.flags, &pinfo.minflt, &pinfo.cminflt, &pinfo.majflt, &pinfo.cmajflt, &pinfo.utime, &pinfo.stime,
+          &pinfo.cutime, &pinfo.cstime, &pinfo.priority, &pinfo.nice, &pinfo.num_threads, &pinfo.itrealvalue,
+          &pinfo.starttime, &pinfo.vsize, &pinfo.rss, &pinfo.rlim, &pinfo.startcode, &pinfo.endcode, &pinfo.startstack,
+          &pinfo.kstkesp, &pinfo.kstkeip, &pinfo.signal, &pinfo.blocked, &pinfo.sigignore, &pinfo.sigcatch,
+          &pinfo.wchan );
+      // resident set size in pages
+      const auto       pr_size   = static_cast<double>( pinfo.vsize );
+      const auto       pr_rssize = static_cast<double>( pinfo.rss );
+      constexpr double MB        = 1.0 / ( 1024 * 1024 );
+      f.vsize                    = pr_size * MB;
+      f.rss                      = pr_rssize * m_pg_size * MB;
+      if ( 0 == pinfo.vsize ) { ok = false; }
     }
+    return ok;
+  };
+
+  // attempt to read from proc
+  if ( !read_proc() ) {
+    std::cerr << "ProcStats : -> Problems reading proc file. Will try reopening..." << std::endl;
+    open_ufd();
+    if ( !read_proc() ) { return false; }
   }
 
 #else