1 //===-- SystemLifetimeManager.cpp ------------------------------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "lldb/Initialization/SystemLifetimeManager.h"
11 #include "lldb/Core/Debugger.h"
12 #include "lldb/Initialization/SystemInitializer.h"
16 using namespace lldb_private;
18 SystemLifetimeManager::SystemLifetimeManager()
19 : m_mutex(), m_initialized(false) {}
21 SystemLifetimeManager::~SystemLifetimeManager() {
22 assert(!m_initialized &&
23 "SystemLifetimeManager destroyed without calling Terminate!");
26 llvm::Error SystemLifetimeManager::Initialize(
27 std::unique_ptr<SystemInitializer> initializer,
28 LoadPluginCallbackType plugin_callback) {
29 std::lock_guard<std::recursive_mutex> guard(m_mutex);
31 assert(!m_initializer && "Attempting to call "
32 "SystemLifetimeManager::Initialize() when it is "
33 "already initialized");
35 m_initializer = std::move(initializer);
37 if (auto e = m_initializer->Initialize())
40 Debugger::Initialize(plugin_callback);
43 return llvm::Error::success();
46 void SystemLifetimeManager::Terminate() {
47 std::lock_guard<std::recursive_mutex> guard(m_mutex);
50 Debugger::Terminate();
51 m_initializer->Terminate();
53 m_initializer.reset();
54 m_initialized = false;