From 9c8b2ab0ff97da172166c68eab5fcf0f4a98e20d Mon Sep 17 00:00:00 2001 From: Axel Naumann <Axel.Naumann@cern.ch> Date: Fri, 25 Aug 2017 11:58:47 -0700 Subject: [PATCH] Unlock upon entering user code, re-lock right after. --- core/metacling/src/TCling.cxx | 16 ++++++++++++++++ core/metacling/src/TClingCallbacks.cxx | 10 ++++++++++ core/metacling/src/TClingCallbacks.h | 3 +++ 3 files changed, 29 insertions(+) diff --git a/core/metacling/src/TCling.cxx b/core/metacling/src/TCling.cxx index d47627225c0..12ebb2c9454 100644 --- a/core/metacling/src/TCling.cxx +++ b/core/metacling/src/TCling.cxx @@ -350,6 +350,22 @@ void TCling__PrintStackTrace() { gSystem->StackTrace(); } +//////////////////////////////////////////////////////////////////////////////// +/// Lock the interpreter. + +extern "C" +void TCling__LockInterpreterMutex() { + if (gInterpreterMutex) gInterpreterMutex->Lock(); +} + +//////////////////////////////////////////////////////////////////////////////// +/// Unlock the interpreter. + +extern "C" +void TCling__UnlockInterpreterMutex() { + if (gInterpreterMutex) gInterpreterMutex->UnLock(); +} + //////////////////////////////////////////////////////////////////////////////// /// Update TClingClassInfo for a class (e.g. upon seeing a definition). diff --git a/core/metacling/src/TClingCallbacks.cxx b/core/metacling/src/TClingCallbacks.cxx index 6863a94a89a..03181876b8e 100644 --- a/core/metacling/src/TClingCallbacks.cxx +++ b/core/metacling/src/TClingCallbacks.cxx @@ -61,6 +61,8 @@ extern "C" { void TCling__LibraryUnloadedRTTI(const void* dyLibHandle, llvm::StringRef canonicalName); void TCling__PrintStackTrace(); + void TCling__LockInterpreterMutex(); + void TCling__UnlockInterpreterMutex(); } TClingCallbacks::TClingCallbacks(cling::Interpreter* interp) @@ -783,3 +785,11 @@ void TClingCallbacks::LibraryUnloaded(const void* dyLibHandle, void TClingCallbacks::PrintStackTrace() { TCling__PrintStackTrace(); } + +void TClingCallbacks::EnteringUserCode() { + TCling__UnlockInterpreterMutex(); +} + +void TClingCallbacks::ReturnedFromUserCode() { + TCling__LockInterpreterMutex(); +} diff --git a/core/metacling/src/TClingCallbacks.h b/core/metacling/src/TClingCallbacks.h index 5915039c725..7522002cb7e 100644 --- a/core/metacling/src/TClingCallbacks.h +++ b/core/metacling/src/TClingCallbacks.h @@ -100,6 +100,9 @@ public: virtual void PrintStackTrace(); + virtual void EnteringUserCode(); + virtual void ReturnedFromUserCode(); + private: bool tryAutoParseInternal(llvm::StringRef Name, clang::LookupResult &R, clang::Scope *S, const clang::FileEntry* FE = 0); -- GitLab