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