From 58cc1bfd6e440dda551471b266a284f28fa4aa57 Mon Sep 17 00:00:00 2001
From: Nils Krumnack <krumnack@iastate.edu>
Date: Tue, 16 Feb 2021 15:55:23 -0600
Subject: [PATCH] fix duplicate definition error in
 ParticleJetTools/CopyTruthJetParticles.h

Hopefully very straightforward: If/When the header gets included more
than once then there are multiple definitions.  Making it a local
static variable should fix that.  This also avoids the awkwardness of
having a global variable named `metaDataFlag`, which seems like a
really bad name for a global variable.
---
 .../ParticleJetTools/CopyTruthJetParticles.h                 | 5 -----
 .../ParticleJetTools/Root/CopyTruthJetParticles.cxx          | 3 +++
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/ParticleJetTools/CopyTruthJetParticles.h b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/ParticleJetTools/CopyTruthJetParticles.h
index 9aa29d4fbf96..33d505a29755 100644
--- a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/ParticleJetTools/CopyTruthJetParticles.h
+++ b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/ParticleJetTools/CopyTruthJetParticles.h
@@ -14,11 +14,6 @@
 #include <vector>
 #include <map>
 
-#include <mutex>          // std::call_once, std::once_flag
-
-std::once_flag metaDataFlag;
-
-
 class CopyTruthJetParticles : public CopyTruthParticles {
 ASG_TOOL_CLASS2(CopyTruthJetParticles, CopyTruthParticles, IJetExecuteTool)
 public:
diff --git a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/CopyTruthJetParticles.cxx b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/CopyTruthJetParticles.cxx
index 61ae79b79ea5..b16a225bfb87 100644
--- a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/CopyTruthJetParticles.cxx
+++ b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/CopyTruthJetParticles.cxx
@@ -15,6 +15,8 @@
 #include "AsgDataHandles/WriteHandle.h"
 #include "AsgMessaging/Check.h"
 
+#include <mutex>          // std::call_once, std::once_flag
+
 #ifndef XAOD_STANDALONE
 // Usage of metadata is for now only possible in Athena...
 //#include "CoralBase/AttributeListException.h"
@@ -256,6 +258,7 @@ int CopyTruthJetParticles::execute() const {
   //  std::call_once(metaDataFlag,&CopyTruthJetParticles::basicMetaDataCheck,this,barcodeOffset);
   // this call happens only once and it modifies m_barcodeOffset
   // Note that catching the return value of this is rather complicated, so it throws rather than returning errors
+  static std::once_flag metaDataFlag;
   std::call_once(metaDataFlag,&CopyTruthJetParticles::setBarCodeFromMetaDataCheck, this);
 
   std::vector<const xAOD::TruthParticle*> promptLeptons;
-- 
GitLab