1 //===-- SystemLifetimeManager.cpp -----------------------------------------===// 2 // 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 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "lldb/Initialization/SystemLifetimeManager.h" 10 11 #include "lldb/Core/Debugger.h" 12 #include "lldb/Initialization/SystemInitializer.h" 13 14 #include <utility> 15 16 using namespace lldb_private; 17 SystemLifetimeManager()18SystemLifetimeManager::SystemLifetimeManager() : m_mutex() {} 19 ~SystemLifetimeManager()20SystemLifetimeManager::~SystemLifetimeManager() { 21 assert(!m_initialized && 22 "SystemLifetimeManager destroyed without calling Terminate!"); 23 } 24 Initialize(std::unique_ptr<SystemInitializer> initializer,LoadPluginCallbackType plugin_callback)25llvm::Error SystemLifetimeManager::Initialize( 26 std::unique_ptr<SystemInitializer> initializer, 27 LoadPluginCallbackType plugin_callback) { 28 std::lock_guard<std::recursive_mutex> guard(m_mutex); 29 if (!m_initialized) { 30 assert(!m_initializer && "Attempting to call " 31 "SystemLifetimeManager::Initialize() when it is " 32 "already initialized"); 33 m_initialized = true; 34 m_initializer = std::move(initializer); 35 36 if (auto e = m_initializer->Initialize()) 37 return e; 38 39 Debugger::Initialize(plugin_callback); 40 } 41 42 return llvm::Error::success(); 43 } 44 Terminate()45void SystemLifetimeManager::Terminate() { 46 std::lock_guard<std::recursive_mutex> guard(m_mutex); 47 48 if (m_initialized) { 49 Debugger::Terminate(); 50 m_initializer->Terminate(); 51 52 m_initializer.reset(); 53 m_initialized = false; 54 } 55 } 56