//===-- SystemLifetimeManager.cpp ------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#include "lldb/Initialization/SystemLifetimeManager.h"

#include "lldb/Core/Debugger.h"
#include "lldb/Host/Mutex.h"
#include "lldb/Initialization/SystemInitializer.h"

#include <utility>

using namespace lldb_private;

SystemLifetimeManager::SystemLifetimeManager()
    : m_mutex(Mutex::eMutexTypeRecursive)
    , m_initialized(false)
{
}

SystemLifetimeManager::~SystemLifetimeManager()
{
    assert(!m_initialized && "SystemLifetimeManager destroyed without calling Terminate!");
}

void
SystemLifetimeManager::Initialize(std::unique_ptr<SystemInitializer> initializer,
                                  LoadPluginCallbackType plugin_callback)
{
    Mutex::Locker locker(m_mutex);
    if (!m_initialized)
    {
        assert(!m_initializer &&
               "Attempting to call SystemLifetimeManager::Initialize() when it is already initialized");
        m_initialized = true;
        m_initializer = std::move(initializer);

        m_initializer->Initialize();
        Debugger::Initialize(plugin_callback);
    }
}

void
SystemLifetimeManager::Terminate()
{
    Mutex::Locker locker(m_mutex);

    if (m_initialized)
    {
        Debugger::Terminate();
        m_initializer->Terminate();

        m_initializer.reset();
        m_initialized = false;
    }
}
