diff options
Diffstat (limited to 'tools/lldb-mi/MICmnThreadMgrStd.h')
-rw-r--r-- | tools/lldb-mi/MICmnThreadMgrStd.h | 202 |
1 files changed, 103 insertions, 99 deletions
diff --git a/tools/lldb-mi/MICmnThreadMgrStd.h b/tools/lldb-mi/MICmnThreadMgrStd.h index f0c157a468af..598c98a9def3 100644 --- a/tools/lldb-mi/MICmnThreadMgrStd.h +++ b/tools/lldb-mi/MICmnThreadMgrStd.h @@ -8,15 +8,15 @@ //===----------------------------------------------------------------------===// //++ -// File: MICmnThreadMgrStd.h +// File: MICmnThreadMgrStd.h // -// Overview: CMICmnThreadMgr interface. +// Overview: CMICmnThreadMgr interface. // -// Environment: Compilers: Visual C++ 12. -// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1 -// Libraries: See MIReadmetxt. +// Environment: Compilers: Visual C++ 12. +// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1 +// Libraries: See MIReadmetxt. // -// Copyright: None. +// Copyright: None. //-- #pragma once @@ -31,104 +31,108 @@ #include "MIUtilSingletonBase.h" //++ ============================================================================ -// Details: MI's worker thread (active thread) manager. -// The manager creates threads and behalf of clients. Client are -// responsible for their threads and can delete them when necessary. -// This manager will stop and delete all threads on *this manager's -// shutdown. -// Singleton class. -// Gotchas: None. -// Authors: Aidan Dodds 12/03/2014. -// Changes: None. +// Details: MI's worker thread (active thread) manager. +// The manager creates threads and behalf of clients. Client are +// responsible for their threads and can delete them when necessary. +// This manager will stop and delete all threads on *this manager's +// shutdown. +// Singleton class. +// Gotchas: None. +// Authors: Aidan Dodds 12/03/2014. +// Changes: None. //-- -class CMICmnThreadMgrStd -: public CMICmnBase -, public MI::ISingleton< CMICmnThreadMgrStd > +class CMICmnThreadMgrStd : public CMICmnBase, public MI::ISingleton<CMICmnThreadMgrStd> { - friend MI::ISingleton< CMICmnThreadMgrStd >; - -// Methods: -public: - bool Initialize( void ); - bool Shutdown( void ); - bool ThreadAllTerminate( void ); // Ask all threads to stop (caution) - template< typename T > // Ask the thread manager to start and stop threads on our behalf - bool ThreadStart( T & vrwObject ); - -// Typedef: -private: - typedef std::vector< CMIUtilThreadActiveObjBase * > ThreadList_t; - -// Methods: -private: - /* ctor */ CMICmnThreadMgrStd( void ); - /* ctor */ CMICmnThreadMgrStd( const CMICmnThreadMgrStd & ); - void operator=( const CMICmnThreadMgrStd & ); - // - bool AddThread( const CMIUtilThreadActiveObjBase & vrObj ); // Add a thread for monitoring by the threadmanager - -// Overridden: -private: - // From CMICmnBase - /* dtor */ virtual ~CMICmnThreadMgrStd( void ); - -// Attributes: -private: - CMIUtilThreadMutex m_mutex; - ThreadList_t m_threadList; + friend MI::ISingleton<CMICmnThreadMgrStd>; + + // Methods: + public: + bool Initialize(void); + bool Shutdown(void); + bool + ThreadAllTerminate(void); // Ask all threads to stop (caution) + template <typename T> // Ask the thread manager to start and stop threads on our behalf + bool ThreadStart(T &vrwObject); + + // Typedef: + private: + typedef std::vector<CMIUtilThreadActiveObjBase *> ThreadList_t; + + // Methods: + private: + /* ctor */ CMICmnThreadMgrStd(void); + /* ctor */ CMICmnThreadMgrStd(const CMICmnThreadMgrStd &); + void operator=(const CMICmnThreadMgrStd &); + // + bool + AddThread(const CMIUtilThreadActiveObjBase &vrObj); // Add a thread for monitoring by the threadmanager + + // Overridden: + private: + // From CMICmnBase + /* dtor */ virtual ~CMICmnThreadMgrStd(void); + + // Attributes: + private: + CMIUtilThreadMutex m_mutex; + ThreadList_t m_threadList; }; //++ ------------------------------------------------------------------------------------ -// Details: Given a thread object start its (worker) thread to do work. The object is -// added to the *this manager for housekeeping and deletion of all thread objects. -// Type: Template method. -// Args: vrwThreadObj - (RW) A CMIUtilThreadActiveObjBase derived object. -// Return: MIstatus::success - Functional succeeded. -// MIstatus::failure - Functional failed. -// Throws: None. +// Details: Given a thread object start its (worker) thread to do work. The object is +// added to the *this manager for housekeeping and deletion of all thread objects. +// Type: Template method. +// Args: vrwThreadObj - (RW) A CMIUtilThreadActiveObjBase derived object. +// Return: MIstatus::success - Functional succeeded. +// MIstatus::failure - Functional failed. +// Throws: None. //-- -template< typename T > -bool CMICmnThreadMgrStd::ThreadStart( T & vrwThreadObj ) +template <typename T> +bool +CMICmnThreadMgrStd::ThreadStart(T &vrwThreadObj) { - bool bOk = MIstatus::success; - - // Grab a reference to the base object type - CMIUtilThreadActiveObjBase & rObj = static_cast< CMIUtilThreadActiveObjBase & >( vrwThreadObj ); - - // Add to the thread managers internal database - bOk &= AddThread( rObj ); - if( !bOk ) - { - const CMIUtilString errMsg( CMIUtilString::Format( MIRSRC( IDS_THREADMGR_ERR_THREAD_FAIL_CREATE ), vrwThreadObj.ThreadGetName().c_str() ) ); - SetErrorDescription( errMsg ); - return MIstatus::failure; - } - - // Grab a reference on behalf of the caller - bOk &= vrwThreadObj.Acquire(); - if( !bOk ) - { - const CMIUtilString errMsg( CMIUtilString::Format( MIRSRC( IDS_THREADMGR_ERR_THREAD_FAIL_CREATE ), vrwThreadObj.ThreadGetName().c_str() ) ); - SetErrorDescription( errMsg ); - return MIstatus::failure; - } - - // Thread is already started - // This call must come after the reference count increment - if( vrwThreadObj.ThreadIsActive() ) - { - // Early exit on thread already running condition - return MIstatus::success; - } - - // Start the thread running - bOk &= vrwThreadObj.ThreadExecute(); - if( !bOk ) - { - const CMIUtilString errMsg( CMIUtilString::Format( MIRSRC( IDS_THREADMGR_ERR_THREAD_FAIL_CREATE ), vrwThreadObj.ThreadGetName().c_str() ) ); - SetErrorDescription( errMsg ); - return MIstatus::failure; - } - - return MIstatus::success; + bool bOk = MIstatus::success; + + // Grab a reference to the base object type + CMIUtilThreadActiveObjBase &rObj = static_cast<CMIUtilThreadActiveObjBase &>(vrwThreadObj); + + // Add to the thread managers internal database + bOk &= AddThread(rObj); + if (!bOk) + { + const CMIUtilString errMsg( + CMIUtilString::Format(MIRSRC(IDS_THREADMGR_ERR_THREAD_FAIL_CREATE), vrwThreadObj.ThreadGetName().c_str())); + SetErrorDescription(errMsg); + return MIstatus::failure; + } + + // Grab a reference on behalf of the caller + bOk &= vrwThreadObj.Acquire(); + if (!bOk) + { + const CMIUtilString errMsg( + CMIUtilString::Format(MIRSRC(IDS_THREADMGR_ERR_THREAD_FAIL_CREATE), vrwThreadObj.ThreadGetName().c_str())); + SetErrorDescription(errMsg); + return MIstatus::failure; + } + + // Thread is already started + // This call must come after the reference count increment + if (vrwThreadObj.ThreadIsActive()) + { + // Early exit on thread already running condition + return MIstatus::success; + } + + // Start the thread running + bOk &= vrwThreadObj.ThreadExecute(); + if (!bOk) + { + const CMIUtilString errMsg( + CMIUtilString::Format(MIRSRC(IDS_THREADMGR_ERR_THREAD_FAIL_CREATE), vrwThreadObj.ThreadGetName().c_str())); + SetErrorDescription(errMsg); + return MIstatus::failure; + } + + return MIstatus::success; } |