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);