blob: eafbe68c9984222df035ad704861325bda8f4297 [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"
13#include "lldb/Host/Mutex.h"
14#include "lldb/Initialization/SystemInitializer.h"
15
16#include <utility>
17
18using namespace lldb_private;
19
20SystemLifetimeManager::SystemLifetimeManager()
21 : m_mutex(Mutex::eMutexTypeRecursive)
22 , m_initialized(false)
23{
24}
25
26SystemLifetimeManager::~SystemLifetimeManager()
27{
28 assert(!m_initialized && "SystemLifetimeManager destroyed without calling Terminate!");
29}
30
31void
32SystemLifetimeManager::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
48void
49SystemLifetimeManager::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}