diff options
Diffstat (limited to 'tools/lldb-mi/MIUtilThreadBaseStd.cpp')
-rw-r--r-- | tools/lldb-mi/MIUtilThreadBaseStd.cpp | 302 |
1 files changed, 0 insertions, 302 deletions
diff --git a/tools/lldb-mi/MIUtilThreadBaseStd.cpp b/tools/lldb-mi/MIUtilThreadBaseStd.cpp deleted file mode 100644 index 72cf1474a78b7..0000000000000 --- a/tools/lldb-mi/MIUtilThreadBaseStd.cpp +++ /dev/null @@ -1,302 +0,0 @@ -//===-- MIUtilThreadBaseStd.cpp ---------------------------------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -// Third Party Headers: -#include <assert.h> - -// In-house headers: -#include "MICmnThreadMgrStd.h" -#include "MIUtilThreadBaseStd.h" - -//++ -// Details: Constructor. -// Type: None. -// Args: None. -// Return: None. -// Throws: None. -//-- -CMIUtilThreadActiveObjBase::CMIUtilThreadActiveObjBase() - : m_references(0), m_bHasBeenKilled(false) {} - -//++ -// Details: Destructor. -// Type: None. -// Args: None. -// Return: None. -// Throws: None. -//-- -CMIUtilThreadActiveObjBase::~CMIUtilThreadActiveObjBase() { - // Make sure our thread is not alive before we die - m_thread.Join(); -} - -//++ -// Details: Check if an object is already running. -// Type: Method. -// Args: None. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. -// Throws: None. -//-- -bool CMIUtilThreadActiveObjBase::ThreadIsActive() { - // Create a new thread to occupy this threads Run() function - return m_thread.IsActive(); -} - -//++ -// Details: Set up *this thread. -// Type: Method. -// Args: None. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. -// Throws: None. -//-- -bool CMIUtilThreadActiveObjBase::ThreadExecute() { - // Create a new thread to occupy this threads Run() function - return m_thread.Start(ThreadEntry, this); -} - -//++ -// Details: Acquire a reference to CMIUtilThreadActiveObjBase. -// Type: Method. -// Args: None. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. -// Throws: None. -//-- -bool CMIUtilThreadActiveObjBase::Acquire() { - // Access to this function is serial - CMIUtilThreadLock serial(m_mutex); - - // >0 == *this thread is alive - m_references++; - - return MIstatus::success; -} - -//++ -// Details: Release a reference to CMIUtilThreadActiveObjBase. -// Type: Method. -// Args: None. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. -// Throws: None. -//-- -bool CMIUtilThreadActiveObjBase::Release() { - // Access to this function is serial - CMIUtilThreadLock serial(m_mutex); - - // 0 == kill off *this thread - m_references--; - - return MIstatus::success; -} - -//++ -// Details: Force this thread to stop, regardless of references -// Type: Method. -// Args: None. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. -// Throws: None. -//-- -bool CMIUtilThreadActiveObjBase::ThreadKill() { - // Access to this function is serial - CMIUtilThreadLock serial(m_mutex); - - // Set this thread to killed status - m_bHasBeenKilled = true; - - return MIstatus::success; -} - -//++ -// Details: Proxy to thread join. -// Type: Method. -// Args: None. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. -// Throws: None. -//-- -bool CMIUtilThreadActiveObjBase::ThreadJoin() { return m_thread.Join(); } - -//++ -// Details: This function is the entry point of this object thread. -// It is a trampoline to an instances operation manager. -// Type: Static method. -// Args: vpThisClass - (R) From the system (our CMIUtilThreadActiveObjBase -// from the ctor). -// Return: MIuint - 0 = success. -// Throws: None. -//-- -MIuint CMIUtilThreadActiveObjBase::ThreadEntry(void *vpThisClass) { - // The argument is a pointer to a CMIUtilThreadActiveObjBase class - // as passed from the initialize function, so we can safely cast it. - assert(vpThisClass != nullptr); - CMIUtilThreadActiveObjBase *pActive = - reinterpret_cast<CMIUtilThreadActiveObjBase *>(vpThisClass); - - // Start the management routine of this object - pActive->ThreadManage(); - - // Thread death - return 0; -} - -//++ -// Details: This function forms a small management routine, to handle the -// thread's running. -// Type: Method. -// Args: None. -// Return: None. -// Throws: None. -//-- -void CMIUtilThreadActiveObjBase::ThreadManage() { - bool bAlive = true; - - // Infinite loop - while (bAlive) { - // Scope the lock while we access m_isDying - { - // Lock down access to the interface - CMIUtilThreadLock serial(m_mutex); - - // Quit the run loop if we are dying - if (m_references == 0) - break; - } - // Execute the run routine - if (!ThreadRun(bAlive)) - // Thread's run function failed (MIstatus::failure) - break; - - // We will die if we have been signaled to die - bAlive &= !m_bHasBeenKilled; - } - - // Execute the finish routine just before we die - // to give the object a chance to clean up - ThreadFinish(); - - m_thread.Finish(); -} - - -// -CMIUtilThread::CMIUtilThread() : m_pThread(nullptr), m_bIsActive(false) {} - -//++ -// Details: CMIUtilThread destructor. -// Type: Method. -// Args: None. -// Return: None. -// Throws: None. -//-- -CMIUtilThread::~CMIUtilThread() { Join(); } - -//++ -// Details: Wait for thread to stop. -// Type: Method. -// Args: None. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. -// Throws: None. -//-- -bool CMIUtilThread::Join() { - if (m_pThread != nullptr) { - // Wait for this thread to die - m_pThread->join(); - - // Scope the thread lock while we modify the pointer - { - CMIUtilThreadLock _lock(m_mutex); - delete m_pThread; - m_pThread = nullptr; - } - } - - return MIstatus::success; -} - -//++ -// Details: Is the thread doing work. -// Type: Method. -// Args: None. -// Return: bool - True = Yes active, false = not active. -// Throws: None. -//-- -bool CMIUtilThread::IsActive() { - // Lock while we access the thread status - CMIUtilThreadLock _lock(m_mutex); - return m_bIsActive; -} - -//++ -// Details: Finish this thread -// Type: Method. -// Args: None. -// Return: None. -// Throws: None. -//-- -void CMIUtilThread::Finish() { - // Lock while we access the thread status - CMIUtilThreadLock _lock(m_mutex); - m_bIsActive = false; -} - -//++ -// Details: Set up *this thread. -// Type: Method. -// Args: vpFn (R) - Function pointer to thread's main function. -// vpArg (R) - Pointer arguments to pass to the thread. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. -// Throws: None. -//-- -bool CMIUtilThread::Start(FnThreadProc vpFn, void *vpArg) { - // Lock while we access the thread pointer and status - CMIUtilThreadLock _lock(m_mutex); - - // Create the std thread, which starts immediately and update its status - m_pThread = new std::thread(vpFn, vpArg); - m_bIsActive = true; - - // We expect to always be able to create one - assert(m_pThread != nullptr); - - return MIstatus::success; -} - - -//++ -// Details: Take resource. -// Type: Method. -// Args: None. -// Return: None. -// Throws: None. -//-- -void CMIUtilThreadMutex::Lock() { m_mutex.lock(); } - -//++ -// Details: Release resource. -// Type: Method. -// Args: None. -// Return: None. -// Throws: None. -//-- -void CMIUtilThreadMutex::Unlock() { m_mutex.unlock(); } - -//++ -// Details: Take resource if available. Immediately return in either case. -// Type: Method. -// Args: None. -// Return: True - mutex has been locked. -// False - mutex could not be locked. -// Throws: None. -//-- -bool CMIUtilThreadMutex::TryLock() { return m_mutex.try_lock(); } |