Avoid using a static mutex to prevent initialization-order-fiasco.

PiperOrigin-RevId: 162678155
This commit is contained in:
A. Unique TensorFlower 2017-07-20 15:55:52 -07:00 committed by TensorFlower Gardener
parent 0264e10b78
commit f199febfa8

View File

@ -32,7 +32,10 @@ tensorflow::gtl::FlatMap<tensorflow::StringPiece, void*>* BuiltinMap() {
return builtin_map; 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
namespace xla { namespace xla {
@ -73,7 +76,7 @@ Registrar::Registrar(tensorflow::StringPiece name, void* function_pointer,
CHECK_EQ(tensorflow::strings::StrCat(kXlaCpuRuntimeSymbolPrefix, base_name), CHECK_EQ(tensorflow::strings::StrCat(kXlaCpuRuntimeSymbolPrefix, base_name),
name); name);
tensorflow::mutex_lock lock(builtin_map_mutex); tensorflow::mutex_lock lock(*BuiltinMapMutex());
InsertOrDie(BuiltinMap(), name, function_pointer); InsertOrDie(BuiltinMap(), name, function_pointer);
} }
} // namespace internal } // namespace internal
@ -81,7 +84,7 @@ Registrar::Registrar(tensorflow::StringPiece name, void* function_pointer,
void* ResolveSymbol(tensorflow::StringPiece name) { void* ResolveSymbol(tensorflow::StringPiece name) {
CHECK(name.starts_with(kXlaCpuRuntimeSymbolPrefix)); CHECK(name.starts_with(kXlaCpuRuntimeSymbolPrefix));
tensorflow::mutex_lock lock(builtin_map_mutex); tensorflow::mutex_lock lock(*BuiltinMapMutex());
const auto& builtin_map = *BuiltinMap(); const auto& builtin_map = *BuiltinMap();
auto lookup_iterator = builtin_map.find(name); auto lookup_iterator = builtin_map.find(name);
return lookup_iterator == builtin_map.end() ? nullptr return lookup_iterator == builtin_map.end() ? nullptr