diff --git a/core/metacling/src/TCling.cxx b/core/metacling/src/TCling.cxx index d47627225c0d4b49fa1ecafaa1d79cdf4f6170d3..12ebb2c9454869f688e4dafea9c3e6b5ae279a27 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 6863a94a89a23b453ed64f67f581158594aafb9c..03181876b8ea16b4c0122262eda2706b6f90b782 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 5915039c725c2c4021bb37c2a1fc82c3f297bdac..7522002cb7ec46d12ad1220c88f65fd6ce421d1d 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);