diff --git a/torch_xla/csrc/runtime/runtime.cpp b/torch_xla/csrc/runtime/runtime.cpp index 4dced2531bd5..270155a538d5 100644 --- a/torch_xla/csrc/runtime/runtime.cpp +++ b/torch_xla/csrc/runtime/runtime.cpp @@ -17,7 +17,7 @@ static std::atomic g_computation_client_initialized(false); // Creates a new instance of a `ComputationClient` (e.g. // `PjRtComputationClient`), and initializes the computation client. // Can only be called when g_computation_client_initialized is false. -static absl::StatusOr +static absl::StatusOr> InitializeComputationClient() { if (sys_util::GetEnvBool("XLA_DUMP_FATAL_STACK", false)) { tsl::testing::InstallStacktraceHandler(); @@ -46,7 +46,7 @@ InitializeComputationClient() { // Set only if we actually successfully initialized a client. g_computation_client_initialized = true; - return client.release(); + return client; } const absl::StatusOr& GetComputationClient() { @@ -55,8 +55,18 @@ const absl::StatusOr& GetComputationClient() { // Since we only allow a single initialization, as soon as this function is // called, we store the initialization result in this trivially destructible // reference. - static const auto& maybe_client = - *new absl::StatusOr(InitializeComputationClient()); + static absl::StatusOr> init_result = + InitializeComputationClient(); + + static absl::StatusOr maybe_client = []() { + if (init_result.ok()) { + return absl::StatusOr( + init_result.value().get()); + } else { + return absl::StatusOr( + init_result.status()); + } + }(); return maybe_client; }