From 71e78a180c16225e240a9402b7aed0fe3a6a0ba1 Mon Sep 17 00:00:00 2001 From: nanbor Date: Fri, 9 May 2003 16:15:35 +0000 Subject: ChangeLogTag:Fri May 09 11:04:44 2003 Nanbor Wang --- ChangeLog | 10 ++++++++++ ace/Thread_Manager.cpp | 25 +++++++++++++++++++++++++ ace/Thread_Manager.h | 4 +++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 3d4fdec193a..f817308021a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +Fri May 09 11:04:44 2003 Nanbor Wang + + * ace/Thread_Manager.h: + * ace/Thread_Manager.cpp: Applied a patch that expose the + Thread_Manager internal freelists, and the thread startup sync + mutex in Thread_Descriptor. These changes allow users to derive + their own Thread_Manager and spawn threads using a third party + library, such as that of Sybase's Open Server. Thanks to Caleb + Epstein for submitting the patch. + Fri May 9 08:45:12 2003 Chad Elliott * examples/Reactor/WFMO_Reactor/Handle_Close.cpp: diff --git a/ace/Thread_Manager.cpp b/ace/Thread_Manager.cpp index 1df82bd00e1..836fbe827ef 100644 --- a/ace/Thread_Manager.cpp +++ b/ace/Thread_Manager.cpp @@ -276,6 +276,31 @@ ACE_Thread_Descriptor::acquire_release (void) } } +void +ACE_Thread_Descriptor::acquire (void) +{ + // Just try to acquire the lock then release it. +#if defined (ACE_THREAD_MANAGER_USES_SAFE_SPAWN) + if (ACE_BIT_DISABLED (this->thr_state_, ACE_Thread_Manager::ACE_THR_SPAWNED)) +#endif /* ACE_THREAD_MANAGER_USES_SAFE_SPAWN */ + { + this->sync_->acquire (); + } +} + +void +ACE_Thread_Descriptor::release (void) +{ + // Just try to acquire the lock then release it. +#if defined (ACE_THREAD_MANAGER_USES_SAFE_SPAWN) + if (ACE_BIT_DISABLED (this->thr_state_, ACE_Thread_Manager::ACE_THR_SPAWNED)) +#endif /* ACE_THREAD_MANAGER_USES_SAFE_SPAWN */ + { + this->sync_->release (); + // Release the lock before putting it back to freelist. + } +} + // The following macro simplifies subsequence code. #define ACE_FIND(OP,INDEX) \ ACE_Thread_Descriptor *INDEX = OP; \ diff --git a/ace/Thread_Manager.h b/ace/Thread_Manager.h index 3b1a78a0a5d..2937b448e26 100644 --- a/ace/Thread_Manager.h +++ b/ace/Thread_Manager.h @@ -293,6 +293,8 @@ public: * only called from ACE_Log_Msg::thr_desc. */ void acquire_release (void); + void acquire (void); + void release (void); /** * Set/get the pointer. These are required by the @@ -1069,9 +1071,9 @@ protected: ACE_Condition_Thread_Mutex zero_cond_; #endif /* ACE_HAS_THREADS */ -private: ACE_Locked_Free_List thread_desc_freelist_; +private: #if ! defined (ACE_THREAD_MANAGER_LACKS_STATICS) /// Pointer to a process-wide . static ACE_Thread_Manager *thr_mgr_; -- cgit v1.2.1