blob: 97e696bb59075c209a1a0dc00cd6cf64aeff2bd6 [file] [log] [blame]
Zachary Turnere6e2bb32015-03-31 21:03:22 +00001//===-- SystemLifetimeManager.cpp ------------------------------*- C++ -*-===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Zachary Turnere6e2bb32015-03-31 21:03:22 +00006//
7//===----------------------------------------------------------------------===//
8
9#include "lldb/Initialization/SystemLifetimeManager.h"
10
11#include "lldb/Core/Debugger.h"
Zachary Turnere6e2bb32015-03-31 21:03:22 +000012#include "lldb/Initialization/SystemInitializer.h"
13
14#include <utility>
15
16using namespace lldb_private;
17
Kate Stoneb9c1b512016-09-06 20:57:50 +000018SystemLifetimeManager::SystemLifetimeManager()
19 : m_mutex(), m_initialized(false) {}
20
21SystemLifetimeManager::~SystemLifetimeManager() {
22 assert(!m_initialized &&
23 "SystemLifetimeManager destroyed without calling Terminate!");
Zachary Turnere6e2bb32015-03-31 21:03:22 +000024}
25
Jonas Devlieghere15eacd72018-12-03 17:28:29 +000026llvm::Error SystemLifetimeManager::Initialize(
Kate Stoneb9c1b512016-09-06 20:57:50 +000027 std::unique_ptr<SystemInitializer> initializer,
Jonas Devlieghere15eacd72018-12-03 17:28:29 +000028 const InitializerOptions &options, LoadPluginCallbackType plugin_callback) {
Kate Stoneb9c1b512016-09-06 20:57:50 +000029 std::lock_guard<std::recursive_mutex> guard(m_mutex);
30 if (!m_initialized) {
31 assert(!m_initializer && "Attempting to call "
32 "SystemLifetimeManager::Initialize() when it is "
33 "already initialized");
34 m_initialized = true;
35 m_initializer = std::move(initializer);
36
Jonas Devlieghere15eacd72018-12-03 17:28:29 +000037 if (auto e = m_initializer->Initialize(options))
38 return e;
39
Kate Stoneb9c1b512016-09-06 20:57:50 +000040 Debugger::Initialize(plugin_callback);
41 }
Jonas Devlieghere15eacd72018-12-03 17:28:29 +000042
43 return llvm::Error::success();
Zachary Turnere6e2bb32015-03-31 21:03:22 +000044}
45
Kate Stoneb9c1b512016-09-06 20:57:50 +000046void SystemLifetimeManager::Terminate() {
47 std::lock_guard<std::recursive_mutex> guard(m_mutex);
Zachary Turnere6e2bb32015-03-31 21:03:22 +000048
Kate Stoneb9c1b512016-09-06 20:57:50 +000049 if (m_initialized) {
50 Debugger::Terminate();
51 m_initializer->Terminate();
Zachary Turnere6e2bb32015-03-31 21:03:22 +000052
Kate Stoneb9c1b512016-09-06 20:57:50 +000053 m_initializer.reset();
54 m_initialized = false;
55 }
Zachary Turnere6e2bb32015-03-31 21:03:22 +000056}