blob: 0f61622b31b02621814fe8ea1038f7dac54792dd [file] [log] [blame]
Zachary Turnere6e2bb32015-03-31 21:03:22 +00001//===-- 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"
Zachary Turnere6e2bb32015-03-31 21:03:22 +000013#include "lldb/Initialization/SystemInitializer.h"
14
15#include <utility>
16
17using namespace lldb_private;
18
Saleem Abdulrasool16ff8602016-05-18 01:59:10 +000019SystemLifetimeManager::SystemLifetimeManager() : m_mutex(), m_initialized(false)
Zachary Turnere6e2bb32015-03-31 21:03:22 +000020{
21}
22
23SystemLifetimeManager::~SystemLifetimeManager()
24{
25 assert(!m_initialized && "SystemLifetimeManager destroyed without calling Terminate!");
26}
27
28void
29SystemLifetimeManager::Initialize(std::unique_ptr<SystemInitializer> initializer,
30 LoadPluginCallbackType plugin_callback)
31{
Saleem Abdulrasool16ff8602016-05-18 01:59:10 +000032 std::lock_guard<std::recursive_mutex> guard(m_mutex);
Zachary Turnere6e2bb32015-03-31 21:03:22 +000033 if (!m_initialized)
34 {
35 assert(!m_initializer &&
36 "Attempting to call SystemLifetimeManager::Initialize() when it is already initialized");
37 m_initialized = true;
38 m_initializer = std::move(initializer);
39
40 m_initializer->Initialize();
41 Debugger::Initialize(plugin_callback);
42 }
43}
44
45void
46SystemLifetimeManager::Terminate()
47{
Saleem Abdulrasool16ff8602016-05-18 01:59:10 +000048 std::lock_guard<std::recursive_mutex> guard(m_mutex);
Zachary Turnere6e2bb32015-03-31 21:03:22 +000049
50 if (m_initialized)
51 {
52 Debugger::Terminate();
53 m_initializer->Terminate();
54
55 m_initializer.reset();
56 m_initialized = false;
57 }
58}