diff options
author | nanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-05-09 16:15:35 +0000 |
---|---|---|
committer | nanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-05-09 16:15:35 +0000 |
commit | 71e78a180c16225e240a9402b7aed0fe3a6a0ba1 (patch) | |
tree | cb0f3593fcdf79e79211ecc532b69f739dcab213 | |
parent | d789c29675e09d02a79cfbdd0fc6cf9709b1a975 (diff) | |
download | ATCD-71e78a180c16225e240a9402b7aed0fe3a6a0ba1.tar.gz |
ChangeLogTag:Fri May 09 11:04:44 2003 Nanbor Wang <nanbor@cs.wustl.edu>
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | ace/Thread_Manager.cpp | 25 | ||||
-rw-r--r-- | ace/Thread_Manager.h | 4 |
3 files changed, 38 insertions, 1 deletions
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 <nanbor@cs.wustl.edu> + + * 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 <cae@bklyn.org> for submitting the patch. + Fri May 9 08:45:12 2003 Chad Elliott <elliott_c@ociweb.com> * 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 <next_> 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<ACE_Thread_Descriptor, ACE_SYNCH_MUTEX> thread_desc_freelist_; +private: #if ! defined (ACE_THREAD_MANAGER_LACKS_STATICS) /// Pointer to a process-wide <ACE_Thread_Manager>. static ACE_Thread_Manager *thr_mgr_; |