Path: blob/main/contrib/llvm-project/lldb/source/Initialization/SystemLifetimeManager.cpp
39587 views
//===-- SystemLifetimeManager.cpp -----------------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "lldb/Initialization/SystemLifetimeManager.h"910#include "lldb/Core/Debugger.h"11#include "lldb/Initialization/SystemInitializer.h"1213#include <utility>1415using namespace lldb_private;1617SystemLifetimeManager::SystemLifetimeManager() : m_mutex() {}1819SystemLifetimeManager::~SystemLifetimeManager() {20assert(!m_initialized &&21"SystemLifetimeManager destroyed without calling Terminate!");22}2324llvm::Error SystemLifetimeManager::Initialize(25std::unique_ptr<SystemInitializer> initializer,26LoadPluginCallbackType plugin_callback) {27std::lock_guard<std::recursive_mutex> guard(m_mutex);28if (!m_initialized) {29assert(!m_initializer && "Attempting to call "30"SystemLifetimeManager::Initialize() when it is "31"already initialized");32m_initialized = true;33m_initializer = std::move(initializer);3435if (auto e = m_initializer->Initialize())36return e;3738Debugger::Initialize(plugin_callback);39}4041return llvm::Error::success();42}4344void SystemLifetimeManager::Terminate() {45std::lock_guard<std::recursive_mutex> guard(m_mutex);4647if (m_initialized) {48Debugger::Terminate();49m_initializer->Terminate();5051m_initializer.reset();52m_initialized = false;53}54}555657