From f199febfa8e5e7a6bbb93cb74725c8bca99f3c8d Mon Sep 17 00:00:00 2001 From: "A. Unique TensorFlower" Date: Thu, 20 Jul 2017 15:55:52 -0700 Subject: [PATCH] Avoid using a static mutex to prevent initialization-order-fiasco. PiperOrigin-RevId: 162678155 --- tensorflow/compiler/xla/service/cpu/cpu_runtime.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tensorflow/compiler/xla/service/cpu/cpu_runtime.cc b/tensorflow/compiler/xla/service/cpu/cpu_runtime.cc index fc851727724..48a30c8078d 100644 --- a/tensorflow/compiler/xla/service/cpu/cpu_runtime.cc +++ b/tensorflow/compiler/xla/service/cpu/cpu_runtime.cc @@ -32,7 +32,10 @@ tensorflow::gtl::FlatMap* BuiltinMap() { return builtin_map; } -tensorflow::mutex builtin_map_mutex(tensorflow::LINKER_INITIALIZED); +tensorflow::mutex* BuiltinMapMutex() { + static tensorflow::mutex* builtin_map_mutex = new tensorflow::mutex; + return builtin_map_mutex; +} } // namespace namespace xla { @@ -73,7 +76,7 @@ Registrar::Registrar(tensorflow::StringPiece name, void* function_pointer, CHECK_EQ(tensorflow::strings::StrCat(kXlaCpuRuntimeSymbolPrefix, base_name), name); - tensorflow::mutex_lock lock(builtin_map_mutex); + tensorflow::mutex_lock lock(*BuiltinMapMutex()); InsertOrDie(BuiltinMap(), name, function_pointer); } } // namespace internal @@ -81,7 +84,7 @@ Registrar::Registrar(tensorflow::StringPiece name, void* function_pointer, void* ResolveSymbol(tensorflow::StringPiece name) { CHECK(name.starts_with(kXlaCpuRuntimeSymbolPrefix)); - tensorflow::mutex_lock lock(builtin_map_mutex); + tensorflow::mutex_lock lock(*BuiltinMapMutex()); const auto& builtin_map = *BuiltinMap(); auto lookup_iterator = builtin_map.find(name); return lookup_iterator == builtin_map.end() ? nullptr