From ba33c614e7fe00a20db35d2f3b239b077697caa6 Mon Sep 17 00:00:00 2001
From: scott snyder <scott.snyder@cern.ch>
Date: Sun, 3 Sep 2017 16:16:29 +0200
Subject: [PATCH] DataModelRoot: Mark some functions as not thread-safe.

Mark as not thread-safe some functions that were relying on manipulating
the global root error threshold.
---
 Control/DataModelRoot/CMakeLists.txt           |  4 ++++
 Control/DataModelRoot/DataModelRoot/RootType.h | 12 +++++++-----
 Control/DataModelRoot/src/RootType.cxx         |  8 ++++----
 3 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/Control/DataModelRoot/CMakeLists.txt b/Control/DataModelRoot/CMakeLists.txt
index 150fe3e7fcff..ea460d21586e 100644
--- a/Control/DataModelRoot/CMakeLists.txt
+++ b/Control/DataModelRoot/CMakeLists.txt
@@ -5,6 +5,10 @@
 # Declare the package name:
 atlas_subdir( DataModelRoot )
 
+atlas_depends_on_subdirs (
+  PUBLIC
+  Control/CxxUtils )
+
 # External dependencies:
 find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread )
 
diff --git a/Control/DataModelRoot/DataModelRoot/RootType.h b/Control/DataModelRoot/DataModelRoot/RootType.h
index cac2b38e39d1..003d41bc303e 100644
--- a/Control/DataModelRoot/DataModelRoot/RootType.h
+++ b/Control/DataModelRoot/DataModelRoot/RootType.h
@@ -14,6 +14,8 @@ class TMethod;
 class TFunction;
 class TMethodArg;
 
+#include "CxxUtils/checker_macros.h"
+
 #define ROOT_6
 
 namespace Reflex {
@@ -90,9 +92,9 @@ public:
    std::string FunctionParameterDefaultAt( size_t nth ) const;
 
    TReturnTypeAdapter   ReturnType() const;
-   TScopeAdapter        DeclaringScope() const;
-   TTypeAdapter         DeclaringType() const;
-   TTypeAdapter         TypeOf() const;
+   TScopeAdapter        DeclaringScope ATLAS_NOT_THREAD_SAFE () const;
+   TTypeAdapter         DeclaringType ATLAS_NOT_THREAD_SAFE () const;
+   TTypeAdapter         TypeOf ATLAS_NOT_THREAD_SAFE () const;
 
 private:
    TDictionary* fMember;
@@ -107,14 +109,14 @@ public:
 public:
    std::string Name() const;
 
-   TScopeAdapter ToType() const;
+   TScopeAdapter ToType ATLAS_NOT_THREAD_SAFE () const;
 
 private:
    TBaseClass* fBase;
 };
 
 
-class TScopeAdapter {
+class ATLAS_NOT_THREAD_SAFE TScopeAdapter {
 public:
    TScopeAdapter();
    TScopeAdapter( TClass* klass );
diff --git a/Control/DataModelRoot/src/RootType.cxx b/Control/DataModelRoot/src/RootType.cxx
index 026b3653421b..58f03590ae1d 100644
--- a/Control/DataModelRoot/src/RootType.cxx
+++ b/Control/DataModelRoot/src/RootType.cxx
@@ -142,7 +142,7 @@ TMemberAdapter::operator TMethodArg*() const
 }
 
 //____________________________________________________________________________
-TTypeAdapter TMemberAdapter::TypeOf() const
+TTypeAdapter TMemberAdapter::TypeOf ATLAS_NOT_THREAD_SAFE () const
 {
    // get the type of the data member
    TDataMember* dataMember = (TDataMember*)*this;
@@ -330,7 +330,7 @@ TScopeAdapter TMemberAdapter::DeclaringScope() const
    return std::string( "" );
 }
 
-TTypeAdapter TMemberAdapter::DeclaringType() const
+TTypeAdapter TMemberAdapter::DeclaringType ATLAS_NOT_THREAD_SAFE () const
 {
 // no distinction between scope/type
    return DeclaringScope();
@@ -345,7 +345,7 @@ std::string TBaseAdapter::Name() const
 }
 
 //____________________________________________________________________________
-TScopeAdapter TBaseAdapter::ToType() const
+TScopeAdapter TBaseAdapter::ToType ATLAS_NOT_THREAD_SAFE () const
 {
 // wrap the actual class representing this base
    return TScopeAdapter( fBase->GetClassPointer() );
@@ -626,7 +626,7 @@ std::string TScopeAdapter::Name( unsigned int mod ) const
 }
 
 //____________________________________________________________________________
-TScopeAdapter TScopeAdapter::DeclaringScope() const
+TScopeAdapter TScopeAdapter::DeclaringScope  ATLAS_NOT_THREAD_SAFE () const
 {
    std::string name = Name( Reflex::FINAL | Reflex::SCOPED );
    std::string::size_type pos = name.rfind( "::" );
-- 
GitLab