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/Host/Mutex.h" 14 #include "lldb/Initialization/SystemInitializer.h" 15 16 #include <utility> 17 18 using namespace lldb_private; 19 20 SystemLifetimeManager::SystemLifetimeManager() 21 : m_mutex(Mutex::eMutexTypeRecursive) 22 , m_initialized(false) 23 { 24 } 25 26 SystemLifetimeManager::~SystemLifetimeManager() 27 { 28 assert(!m_initialized && "SystemLifetimeManager destroyed without calling Terminate!"); 29 } 30 31 void 32 SystemLifetimeManager::Initialize(std::unique_ptr<SystemInitializer> initializer, 33 LoadPluginCallbackType plugin_callback) 34 { 35 Mutex::Locker locker(m_mutex); 36 if (!m_initialized) 37 { 38 assert(!m_initializer && 39 "Attempting to call SystemLifetimeManager::Initialize() when it is already initialized"); 40 m_initialized = true; 41 m_initializer = std::move(initializer); 42 43 m_initializer->Initialize(); 44 Debugger::Initialize(plugin_callback); 45 } 46 } 47 48 void 49 SystemLifetimeManager::Terminate() 50 { 51 Mutex::Locker locker(m_mutex); 52 53 if (m_initialized) 54 { 55 Debugger::Terminate(); 56 m_initializer->Terminate(); 57 58 m_initializer.reset(); 59 m_initialized = false; 60 } 61 } 62