diff --git a/common/cpp/src/asapo_fabric/asapo_fabric.cpp b/common/cpp/src/asapo_fabric/asapo_fabric.cpp
index e4612b7c754e3e4705d4d7015c68b14b298e7cf7..a74a25c93e0945e2e17f864c5385c4df4125a395 100644
--- a/common/cpp/src/asapo_fabric/asapo_fabric.cpp
+++ b/common/cpp/src/asapo_fabric/asapo_fabric.cpp
@@ -3,6 +3,7 @@
 
 #ifdef LIBFABRIC_ENABLED
 #include <dlfcn.h>
+#include <mutex>
 #include "fabric_factory_impl.h"
 #include "fabric_function_map.h"
 #endif
@@ -11,6 +12,9 @@ using namespace asapo::fabric;
 
 std::unique_ptr<FabricFactory> asapo::fabric::GenerateDefaultFabricFactory() {
 #ifdef LIBFABRIC_ENABLED
+    static std::mutex lock;
+    std::unique_lock<std::mutex> local_lock (lock);
+
     if (gffm().is_init_) {
         return std::unique_ptr<FabricFactory>(new FabricFactoryImpl());
     }