summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-05-09 16:15:35 +0000
committernanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-05-09 16:15:35 +0000
commit71e78a180c16225e240a9402b7aed0fe3a6a0ba1 (patch)
treecb0f3593fcdf79e79211ecc532b69f739dcab213
parentd789c29675e09d02a79cfbdd0fc6cf9709b1a975 (diff)
downloadATCD-71e78a180c16225e240a9402b7aed0fe3a6a0ba1.tar.gz
ChangeLogTag:Fri May 09 11:04:44 2003 Nanbor Wang <nanbor@cs.wustl.edu>
-rw-r--r--ChangeLog10
-rw-r--r--ace/Thread_Manager.cpp25
-rw-r--r--ace/Thread_Manager.h4
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_;