1 //===-- SystemLifetimeManager.cpp ------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "lldb/Initialization/SystemLifetimeManager.h" 11 12 #include "lldb/Core/Debugger.h" 13 #include "lldb/Initialization/SystemInitializer.h" 14 15 #include <utility> 16 17 using namespace lldb_private; 18 19 SystemLifetimeManager::SystemLifetimeManager() 20 : m_mutex(), m_initialized(false) {} 21 22 SystemLifetimeManager::~SystemLifetimeManager() { 23 assert(!m_initialized && 24 "SystemLifetimeManager destroyed without calling Terminate!"); 25 } 26 27 void SystemLifetimeManager::Initialize( 28 std::unique_ptr<SystemInitializer> initializer, 29 LoadPluginCallbackType plugin_callback) { 30 std::lock_guard<std::recursive_mutex> guard(m_mutex); 31 if (!m_initialized) { 32 assert(!m_initializer && "Attempting to call " 33 "SystemLifetimeManager::Initialize() when it is " 34 "already initialized"); 35 m_initialized = true; 36 m_initializer = std::move(initializer); 37 38 m_initializer->Initialize(); 39 Debugger::Initialize(plugin_callback); 40 } 41 } 42 43 void SystemLifetimeManager::Terminate() { 44 std::lock_guard<std::recursive_mutex> guard(m_mutex); 45 46 if (m_initialized) { 47 Debugger::Terminate(); 48 m_initializer->Terminate(); 49 50 m_initializer.reset(); 51 m_initialized = false; 52 } 53 } 54