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