summaryrefslogtreecommitdiff
path: root/ace/Synch_T.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ace/Synch_T.cpp')
-rw-r--r--ace/Synch_T.cpp791
1 files changed, 0 insertions, 791 deletions
diff --git a/ace/Synch_T.cpp b/ace/Synch_T.cpp
deleted file mode 100644
index a1d2b05ace0..00000000000
--- a/ace/Synch_T.cpp
+++ /dev/null
@@ -1,791 +0,0 @@
-// $Id$
-
-#if !defined (ACE_SYNCH_T_C)
-#define ACE_SYNCH_T_C
-
-#define ACE_BUILD_DLL
-#include "ace/Thread.h"
-#include "ace/Synch_T.h"
-#include "ace/Log_Msg.h"
-
-#if !defined (__ACE_INLINE__)
-#include "ace/Synch_T.i"
-// On non-Win32 platforms, this code will be treated as normal code.
-#if !defined (ACE_WIN32)
-#include "ace/Atomic_Op.i"
-#endif /* !ACE_WIN32 */
-#endif /* __ACE_INLINE__ */
-
-ACE_ALLOC_HOOK_DEFINE(ACE_Atomic_Op)
-
-template <class ACE_LOCK, class TYPE>
-ACE_Test_and_Set<ACE_LOCK, TYPE>::ACE_Test_and_Set (TYPE initial_value)
- : is_set_ (initial_value)
-{
-}
-
-// Returns true if we are done, else false.
-template <class ACE_LOCK, class TYPE> TYPE
-ACE_Test_and_Set<ACE_LOCK, TYPE>::is_set (void) const
-{
- ACE_GUARD_RETURN (ACE_LOCK, ace_mon, (ACE_LOCK &) this->lock_, this->is_set_);
- return this->is_set_;
-}
-
-// Sets the <is_set_> status.
-template <class ACE_LOCK, class TYPE> TYPE
-ACE_Test_and_Set<ACE_LOCK, TYPE>::set (TYPE status)
-{
- ACE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, this->is_set_);
- TYPE o_status = this->is_set_;
- this->is_set_ = status;
- return o_status;
-}
-
-template <class ACE_LOCK, class TYPE> int
-ACE_Test_and_Set<ACE_LOCK, TYPE>::handle_signal (int, siginfo_t *, ucontext_t *)
-{
- // By setting this to 1, we are "signaling" to anyone calling
- // <is_set> or or <set> that the "test and set" object is in the
- // "signaled" state, i.e., it's "available" to be set back to 0.
- this->set (1);
- return 0;
-}
-
-template <class ACE_LOCK, class TYPE> ACE_LOCK &
-ACE_Atomic_Op<ACE_LOCK, TYPE>::mutex (void)
-{
-// ACE_TRACE ("ACE_Atomic_Op<ACE_LOCK, TYPE>::lock");
- return this->mutex_;
-}
-
-template <class ACE_LOCK, class TYPE> void
-ACE_Atomic_Op<ACE_LOCK, TYPE>::dump (void) const
-{
-// ACE_TRACE ("ACE_Atomic_Op<ACE_LOCK, TYPE>::dump");
-
- ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
- this->mutex_.dump ();
- ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
-}
-
-template <class ACE_LOCK, class TYPE>
-ACE_Atomic_Op<ACE_LOCK, TYPE>::ACE_Atomic_Op (void)
- : value_ (0)
-{
-// ACE_TRACE ("ACE_Atomic_Op<ACE_LOCK, TYPE>::ACE_Atomic_Op");
-}
-
-template <class ACE_LOCK, class TYPE>
-ACE_Atomic_Op<ACE_LOCK, TYPE>::ACE_Atomic_Op (const TYPE &c)
- : value_ (c)
-{
-// ACE_TRACE ("ACE_Atomic_Op<ACE_LOCK, TYPE>::ACE_Atomic_Op");
-}
-
-ACE_ALLOC_HOOK_DEFINE(ACE_Guard)
-
-template <class ACE_LOCK> void
-ACE_Guard<ACE_LOCK>::dump (void) const
-{
-// ACE_TRACE ("ACE_Guard<ACE_LOCK>::dump");
-
- ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
- ACE_DEBUG ((LM_DEBUG, ASYS_TEXT ("mutex_ = %x\n"), this->lock_));
- ACE_DEBUG ((LM_DEBUG, ASYS_TEXT ("owner_ = %d\n"), this->owner_));
- ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
-}
-
-ACE_ALLOC_HOOK_DEFINE(ACE_Write_Guard)
-
-template <class ACE_LOCK> void
-ACE_Write_Guard<ACE_LOCK>::dump (void) const
-{
-// ACE_TRACE ("ACE_Write_Guard<ACE_LOCK>::dump");
- ACE_Guard<ACE_LOCK>::dump ();
-}
-
-ACE_ALLOC_HOOK_DEFINE(ACE_Read_Guard)
-
-template <class ACE_LOCK> void
-ACE_Read_Guard<ACE_LOCK>::dump (void) const
-{
-// ACE_TRACE ("ACE_Read_Guard<ACE_LOCK>::dump");
- ACE_Guard<ACE_LOCK>::dump ();
-}
-
-#if defined (ACE_HAS_THREADS)
-
-ACE_ALLOC_HOOK_DEFINE(ACE_Condition)
-
-template <class MUTEX> void
-ACE_Condition<MUTEX>::dump (void) const
-{
-// ACE_TRACE ("ACE_Condition<MUTEX>::dump");
-
- ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
- ACE_DEBUG ((LM_DEBUG, ASYS_TEXT ("\n")));
- ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
-}
-
-template <class MUTEX>
-ACE_Thread_Condition<MUTEX>::ACE_Thread_Condition (MUTEX &m,
- LPCTSTR name,
- void *arg)
- : ACE_Condition<MUTEX> (m, USYNC_THREAD, name, arg)
-{
-// ACE_TRACE ("ACE_Thread_Condition<MUTEX>::ACE_Thread_Condition");
-}
-
-template <class MUTEX> void
-ACE_Thread_Condition<MUTEX>::dump (void) const
-{
-// ACE_TRACE ("ACE_Thread_Condition<MUTEX>::dump");
-
- ACE_Condition<MUTEX>::dump ();
-}
-
-template <class MUTEX>
-ACE_Condition<MUTEX>::ACE_Condition (MUTEX &m,
- int type,
- LPCTSTR name,
- void *arg)
- : mutex_ (m)
-{
-// ACE_TRACE ("ACE_Condition<MUTEX>::ACE_Condition");
- if (ACE_OS::cond_init (&this->cond_, type, name, arg) != 0)
- ACE_ERROR ((LM_ERROR, ASYS_TEXT ("%p\n"), ASYS_TEXT ("ACE_Condition::ACE_Condition")));
-}
-
-template <class MUTEX>
-ACE_Condition<MUTEX>::~ACE_Condition (void)
-{
-// ACE_TRACE ("ACE_Condition<MUTEX>::~ACE_Condition");
- if (this->remove () == -1)
- ACE_ERROR ((LM_ERROR, ASYS_TEXT ("%p\n"), ASYS_TEXT ("ACE_Condition::~ACE_Condition")));
-}
-
-template <class MUTEX> int
-ACE_Condition<MUTEX>::wait (void)
-{
-// ACE_TRACE ("ACE_Condition<MUTEX>::wait");
- return ACE_OS::cond_wait (&this->cond_, &this->mutex_.lock_);
-}
-
-template <class MUTEX> int
-ACE_Condition<MUTEX>::wait (MUTEX &mutex,
- const ACE_Time_Value *abstime)
-{
-// ACE_TRACE ("ACE_Condition<MUTEX>::wait");
- if (abstime == 0)
- return this->wait ();
- else
- return ACE_OS::cond_timedwait (&this->cond_,
- &mutex.lock_,
- (ACE_Time_Value *) abstime);
-}
-
-// Peform an "alertable" timed wait. If the argument ABSTIME == 0
-// then we do a regular cond_wait(), else we do a timed wait for up to
-// ABSTIME using the Solaris cond_timedwait() function.
-
-template <class MUTEX> int
-ACE_Condition<MUTEX>::wait (const ACE_Time_Value *abstime)
-{
-// ACE_TRACE ("ACE_Condition<MUTEX>::wait");
- return this->wait (this->mutex_, abstime);
-}
-#endif /* ACE_HAS_THREADS */
-
-ACE_ALLOC_HOOK_DEFINE(ACE_TSS)
-
-template <class TYPE>
-ACE_TSS<TYPE>::~ACE_TSS (void)
-{
- // We can't call <ACE_OS::thr_keyfree> until *all* of the threads
- // that are using that key have done an <ACE_OS::thr_key_detach>.
- // Otherwise, we'll end up with "dangling TSS pointers."
- ACE_OS::thr_key_detach (this);
-}
-
-template <class TYPE> TYPE *
-ACE_TSS<TYPE>::operator-> () const
-{
- return this->ts_get ();
-}
-
-template <class TYPE>
-ACE_TSS<TYPE>::operator TYPE *(void) const
-{
- return this->ts_get ();
-}
-
-template <class TYPE> TYPE *
-ACE_TSS<TYPE>::make_TSS_TYPE (void) const
-{
- return new TYPE;
-}
-
-template <class TYPE> void
-ACE_TSS<TYPE>::dump (void) const
-{
-// ACE_TRACE ("ACE_TSS<TYPE>::dump");
-#if defined (ACE_HAS_THREADS) && (defined (ACE_HAS_THREAD_SPECIFIC_STORAGE) || defined (ACE_HAS_TSS_EMULATION))
- ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
- this->keylock_.dump ();
- ACE_DEBUG ((LM_DEBUG, ASYS_TEXT ("key_ = %d\n"), this->key_));
- ACE_DEBUG ((LM_DEBUG, ASYS_TEXT ("\nonce_ = %d"), this->once_));
- ACE_DEBUG ((LM_DEBUG, ASYS_TEXT ("\n")));
- ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
-#endif /* defined (ACE_HAS_THREADS) && (defined (ACE_HAS_THREAD_SPECIFIC_STORAGE) || defined (ACE_HAS_TSS_EMULATION)) */
-}
-
-#if defined (ACE_HAS_THREADS) && (defined (ACE_HAS_THREAD_SPECIFIC_STORAGE) || defined (ACE_HAS_TSS_EMULATION))
-#if defined (ACE_HAS_THR_C_DEST)
-extern "C" void ACE_TSS_C_cleanup(void *); // defined in Synch.cpp
-#endif /* ACE_HAS_THR_C_DEST */
-
-template <class TYPE> void
-ACE_TSS<TYPE>::cleanup (void *ptr)
-{
- // Cast this to the concrete TYPE * so the destructor gets called.
- delete (TYPE *) ptr;
-}
-
-template <class TYPE>
-ACE_TSS<TYPE>::ACE_TSS (TYPE *ts_obj)
- : once_ (0),
- key_ (ACE_OS::NULL_key)
-{
- // If caller has passed us a non-NULL TYPE *, then we'll just use
- // this to initialize the thread-specific value. Thus, subsequent
- // calls to operator->() will return this value. This is useful
- // since it enables us to assign objects to thread-specific data
- // that have arbitrarily complex constructors!
-
- if (ts_obj != 0)
- {
- ACE_ASSERT (this->once_ == 0);
-
- if (ACE_Thread::keycreate (&this->key_,
-#if defined (ACE_HAS_THR_C_DEST)
- &ACE_TSS_C_cleanup,
-#else
- &ACE_TSS<TYPE>::cleanup,
-#endif /* ACE_HAS_THR_C_DEST */
- (void *) this) != 0)
- {
- int errnum = errno;
- // What should we do if this call fails?!
-#if defined (ACE_HAS_WINCE)
- ::MessageBox (NULL, L"ACE_Thread::keycreate() failed!",
- L"ACE_TSS::ACE_TSS", MB_OK);
-#else
- ACE_OS::fprintf (stderr, "ACE_Thread::keycreate() failed!");
-#endif /* ACE_HAS_WINCE */
- errno = errnum;
- return;
- }
-
- this->once_ = 1;
-
-#if defined (ACE_HAS_THR_C_DEST)
- // Encapsulate a ts_obj and it's destructor in an ACE_TSS_Adapter
- ACE_TSS_Adapter *tss_adapter;
- ACE_NEW (tss_adapter,
- ACE_TSS_Adapter ((void *) ts_obj, ACE_TSS<TYPE>::cleanup));
-
- // Put the adapter in thread specific storage
- if (ACE_Thread::setspecific (this->key_, (void *) tss_adapter) != 0)
- {
- delete tss_adapter;
- ACE_ERROR ((LM_ERROR, ASYS_TEXT ("%p\n"), ASYS_TEXT ("ACE_Thread::setspecific() failed!")));
- }
-#else
- if (ACE_Thread::setspecific (this->key_, (void *) ts_obj) != 0)
- ACE_ERROR ((LM_ERROR, ASYS_TEXT ("%p\n"), ASYS_TEXT ("ACE_Thread::setspecific() failed!")));
-#endif /* ACE_HAS_THR_C_DEST */
- }
-}
-
-template <class TYPE> TYPE *
-ACE_TSS<TYPE>::ts_get (void) const
-{
- // Create and initialize thread-specific ts_obj.
- if (this->once_ == 0)
- {
- // Insure that we are serialized!
- ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, (ACE_Thread_Mutex &) this->keylock_, 0);
-
- // Use the Double-Check pattern to make sure we only create the
- // key once!
- if (this->once_ == 0)
- {
- if (ACE_Thread::keycreate ((ACE_thread_key_t *) &this->key_,
-#if defined (ACE_HAS_THR_C_DEST)
- &ACE_TSS_C_cleanup,
-#else
- &ACE_TSS<TYPE>::cleanup,
-#endif /* ACE_HAS_THR_C_DEST */
- (void *) this) != 0)
- return 0; // Major problems, this should *never* happen!
- else
- // This *must* come last to avoid race conditions! Note
- // that we need to "cast away const..."
- *(int *) &this->once_ = 1;
- }
- }
-
- TYPE *ts_obj = 0;
-
-#if defined (ACE_HAS_THR_C_DEST)
- ACE_TSS_Adapter *tss_adapter = 0;
-
- // Get the adapter from thread-specific storage
- if (ACE_Thread::getspecific (this->key_, (void **) &tss_adapter) == -1)
- return 0; // This should not happen!
-
- // Check to see if this is the first time in for this thread.
- if (tss_adapter == 0)
-#else
- // Get the ts_obj from thread-specific storage. Note that no locks
- // are required here...
- if (ACE_Thread::getspecific (this->key_, (void **) &ts_obj) == -1)
- return 0; // This should not happen!
-
- // Check to see if this is the first time in for this thread.
- if (ts_obj == 0)
-#endif /* ACE_HAS_THR_C_DEST */
- {
- // Allocate memory off the heap and store it in a pointer in
- // thread-specific storage (on the stack...).
-
- ts_obj = this->make_TSS_TYPE ();
-
- if (ts_obj == 0)
- return 0;
-
-#if defined (ACE_HAS_THR_C_DEST)
- // Encapsulate a ts_obj and it's destructor in an ACE_TSS_Adapter
- ACE_NEW_RETURN (tss_adapter,
- ACE_TSS_Adapter (ts_obj, ACE_TSS<TYPE>::cleanup), 0);
-
- // Put the adapter in thread specific storage
- if (ACE_Thread::setspecific (this->key_, (void *) tss_adapter) != 0)
- {
- delete tss_adapter;
- delete ts_obj;
- return 0; // Major problems, this should *never* happen!
- }
-#else
- // Store the dynamically allocated pointer in thread-specific
- // storage.
- if (ACE_Thread::setspecific (this->key_, (void *) ts_obj) != 0)
- {
- delete ts_obj;
- return 0; // Major problems, this should *never* happen!
- }
-#endif /* ACE_HAS_THR_C_DEST */
- }
-
-#if defined (ACE_HAS_THR_C_DEST)
- return (TYPE *) tss_adapter->ts_obj_; // return the underlying ts object
-#else
- return ts_obj;
-#endif /* ACE_HAS_THR_C_DEST */
-}
-
-// Get the thread-specific object for the key associated with this
-// object. Returns 0 if the ts_obj has never been initialized,
-// otherwise returns a pointer to the ts_obj.
-
-template <class TYPE> TYPE *
-ACE_TSS<TYPE>::ts_object (void) const
-{
- // Ensure that we are serialized!
- ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, (ACE_Thread_Mutex &) this->keylock_, 0);
-
- if (this->once_ == 0) // Return 0 if we've never been initialized.
- return 0;
- else
- {
- TYPE *ts_obj = 0;
-#if defined (ACE_HAS_THR_C_DEST)
- ACE_TSS_Adapter *tss_adapter = 0;
-
- // Get the tss adapter from thread-specific storage
- if (ACE_Thread::getspecific (this->key_, (void **) &tss_adapter) == -1)
- return 0; // This should not happen!
- else if (tss_adapter != 0)
- // Extract the real TS object.
- ts_obj = (TYPE *) tss_adapter->ts_obj_;
-#else
- if (ACE_Thread::getspecific (this->key_, (void **) &ts_obj) == -1)
- return 0; // This should not happen!
-#endif /* ACE_HAS_THR_C_DEST */
- return ts_obj;
- }
-}
-
-template <class TYPE> TYPE *
-ACE_TSS<TYPE>::ts_object (TYPE *new_ts_obj)
-{
- // Ensure that we are serialized!
- ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->keylock_, 0);
-
- if (this->once_ == 0) // Return 0 if we've never been initialized.
- return 0;
- else
- {
- TYPE *ts_obj = 0;
-
-#if defined (ACE_HAS_THR_C_DEST)
- ACE_TSS_Adapter *tss_adapter = 0;
-
- if (ACE_Thread::getspecific (this->key_, (void **) &tss_adapter) == -1)
- return 0; // This should not happen!
-
- if (tss_adapter != 0)
- {
- ts_obj = (TYPE *) tss_adapter->ts_obj_;
- delete tss_adapter; // don't need this anymore
- }
-
- ACE_NEW_RETURN (tss_adapter,
- ACE_TSS_Adapter ((void *)new_ts_obj, ACE_TSS<TYPE>::cleanup),
- 0);
-
- if (ACE_Thread::setspecific (this->key_, (void *) tss_adapter) == -1)
- {
- delete tss_adapter;
- return ts_obj; // This should not happen!
- }
-#else
- if (ACE_Thread::getspecific (this->key_, (void **) &ts_obj) == -1)
- return 0; // This should not happen!
- if (ACE_Thread::setspecific (this->key_, (void *) new_ts_obj) == -1)
- return ts_obj; // This should not happen!
-#endif /* ACE_HAS_THR_C_DEST */
- else
- return ts_obj;
- }
-}
-
-ACE_ALLOC_HOOK_DEFINE(ACE_TSS_Guard)
-
-template <class ACE_LOCK> void
-ACE_TSS_Guard<ACE_LOCK>::dump (void) const
-{
-// ACE_TRACE ("ACE_TSS_Guard<ACE_LOCK>::dump");
-
- ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
- ACE_DEBUG ((LM_DEBUG, ASYS_TEXT ("key_ = %d"), this->key_));
- ACE_DEBUG ((LM_DEBUG, ASYS_TEXT ("\n")));
- ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
-}
-
-template <class ACE_LOCK> void
-ACE_TSS_Guard<ACE_LOCK>::init_key (void)
-{
-// ACE_TRACE ("ACE_TSS_Guard<ACE_LOCK>::init_key");
-
- this->key_ = ACE_OS::NULL_key;
- ACE_Thread::keycreate (&this->key_,
-#if defined (ACE_HAS_THR_C_DEST)
- &ACE_TSS_C_cleanup,
-#else
- &ACE_TSS_Guard<ACE_LOCK>::cleanup,
-#endif /* ACE_HAS_THR_C_DEST */
- (void *) this);
-}
-
-template <class ACE_LOCK>
-ACE_TSS_Guard<ACE_LOCK>::ACE_TSS_Guard (void)
-{
-// ACE_TRACE ("ACE_TSS_Guard<ACE_LOCK>::ACE_TSS_Guard");
- this->init_key ();
-}
-
-template <class ACE_LOCK> int
-ACE_TSS_Guard<ACE_LOCK>::release (void)
-{
-// ACE_TRACE ("ACE_TSS_Guard<ACE_LOCK>::release");
-
- ACE_Guard<ACE_LOCK> *guard = 0;
-
-#if defined (ACE_HAS_THR_C_DEST)
- ACE_TSS_Adapter *tss_adapter = 0;
- ACE_Thread::getspecific (this->key_, (void **) &tss_adapter);
- guard = (ACE_Guard<ACE_LOCK> *)tss_adapter->ts_obj_;
-#else
- ACE_Thread::getspecific (this->key_, (void **) &guard);
-#endif /* ACE_HAS_THR_C_DEST */
-
- return guard->release ();
-}
-
-template <class ACE_LOCK> int
-ACE_TSS_Guard<ACE_LOCK>::remove (void)
-{
-// ACE_TRACE ("ACE_TSS_Guard<ACE_LOCK>::remove");
-
- ACE_Guard<ACE_LOCK> *guard = 0;
-
-#if defined (ACE_HAS_THR_C_DEST)
- ACE_TSS_Adapter *tss_adapter = 0;
- ACE_Thread::getspecific (this->key_, (void **) &tss_adapter);
- guard = (ACE_Guard<ACE_LOCK> *)tss_adapter->ts_obj_;
-#else
- ACE_Thread::getspecific (this->key_, (void **) &guard);
-#endif /* ACE_HAS_THR_C_DEST */
-
- return guard->remove ();
-}
-
-template <class ACE_LOCK>
-ACE_TSS_Guard<ACE_LOCK>::~ACE_TSS_Guard (void)
-{
-// ACE_TRACE ("ACE_TSS_Guard<ACE_LOCK>::~ACE_TSS_Guard");
-
- ACE_Guard<ACE_LOCK> *guard = 0;
-
-#if defined (ACE_HAS_THR_C_DEST)
- ACE_TSS_Adapter *tss_adapter = 0;
- ACE_Thread::getspecific (this->key_, (void **) &tss_adapter);
- guard = (ACE_Guard<ACE_LOCK> *) tss_adapter->ts_obj_;
-#else
- ACE_Thread::getspecific (this->key_, (void **) &guard);
-#endif /* ACE_HAS_THR_C_DEST */
-
- // Make sure that this pointer is NULL when we shut down...
- ACE_Thread::setspecific (this->key_, 0);
- ACE_Thread::keyfree (this->key_);
- // Destructor releases lock.
- delete guard;
-}
-
-template <class ACE_LOCK> void
-ACE_TSS_Guard<ACE_LOCK>::cleanup (void *ptr)
-{
-// ACE_TRACE ("ACE_TSS_Guard<ACE_LOCK>::dump");
-
- // Destructor releases lock.
- delete (ACE_Guard<ACE_LOCK> *) ptr;
-}
-
-template <class ACE_LOCK>
-ACE_TSS_Guard<ACE_LOCK>::ACE_TSS_Guard (ACE_LOCK &lock, int block)
-{
-// ACE_TRACE ("ACE_TSS_Guard<ACE_LOCK>::ACE_TSS_Guard");
-
- this->init_key ();
- ACE_Guard<ACE_LOCK> *guard;
- ACE_NEW (guard, ACE_Guard<ACE_LOCK> (lock, block));
-
-#if defined (ACE_HAS_THR_C_DEST)
- ACE_TSS_Adapter *tss_adapter;
- ACE_NEW (tss_adapter,
- ACE_TSS_Adapter ((void *) guard,
- ACE_TSS_Guard<ACE_LOCK>::cleanup));
- ACE_Thread::setspecific (this->key_, (void *) tss_adapter);
-#else
- ACE_Thread::setspecific (this->key_, (void *) guard);
-#endif /* ACE_HAS_THR_C_DEST */
-}
-
-template <class ACE_LOCK> int
-ACE_TSS_Guard<ACE_LOCK>::acquire (void)
-{
-// ACE_TRACE ("ACE_TSS_Guard<ACE_LOCK>::acquire");
-
- ACE_Guard<ACE_LOCK> *guard = 0;
-
-#if defined (ACE_HAS_THR_C_DEST)
- ACE_TSS_Adapter *tss_adapter = 0;
- ACE_Thread::getspecific (this->key_, (void **) &tss_adapter);
- guard = (ACE_Guard<ACE_LOCK> *) tss_adapter->ts_obj_;
-#else
- ACE_Thread::getspecific (this->key_, (void **) &guard);
-#endif /* ACE_HAS_THR_C_DEST */
-
- return guard->acquire ();
-}
-
-template <class ACE_LOCK> int
-ACE_TSS_Guard<ACE_LOCK>::tryacquire (void)
-{
-// ACE_TRACE ("ACE_TSS_Guard<ACE_LOCK>::tryacquire");
-
- ACE_Guard<ACE_LOCK> *guard = 0;
-
-#if defined (ACE_HAS_THR_C_DEST)
- ACE_TSS_Adapter *tss_adapter = 0;
- ACE_Thread::getspecific (this->key_, (void **) &tss_adapter);
- guard = (ACE_Guard<ACE_LOCK> *) tss_adapter->ts_obj_;
-#else
- ACE_Thread::getspecific (this->key_, (void **) &guard);
-#endif /* ACE_HAS_THR_C_DEST */
-
- return guard->tryacquire ();
-}
-
-template <class ACE_LOCK>
-ACE_TSS_Write_Guard<ACE_LOCK>::ACE_TSS_Write_Guard (ACE_LOCK &lock, int block)
-{
-// ACE_TRACE ("ACE_TSS_Write_Guard<ACE_LOCK>::ACE_TSS_Write_Guard");
-
- this->init_key ();
- ACE_Guard<ACE_LOCK> *guard;
- ACE_NEW (guard, ACE_Write_Guard<ACE_LOCK> (lock, block));
-
-#if defined (ACE_HAS_THR_C_DEST)
- ACE_TSS_Adapter *tss_adapter;
- ACE_NEW (tss_adapter,
- ACE_TSS_Adapter ((void *) guard,
- ACE_TSS_Guard<ACE_LOCK>::cleanup));
- ACE_Thread::setspecific (this->key_, (void *) tss_adapter);
-#else
- ACE_Thread::setspecific (this->key_, (void *) guard);
-#endif /* ACE_HAS_THR_C_DEST */
-}
-
-template <class ACE_LOCK> int
-ACE_TSS_Write_Guard<ACE_LOCK>::acquire (void)
-{
-// ACE_TRACE ("ACE_TSS_Write_Guard<ACE_LOCK>::acquire");
-
- ACE_Write_Guard<ACE_LOCK> *guard = 0;
-
-#if defined (ACE_HAS_THR_C_DEST)
- ACE_TSS_Adapter *tss_adapter = 0;
- ACE_Thread::getspecific (this->key_, (void **) &tss_adapter);
- guard = (ACE_Guard<ACE_LOCK> *) tss_adapter->ts_obj_;
-#else
- ACE_Thread::getspecific (this->key_, (void **) &guard);
-#endif /* ACE_HAS_THR_C_DEST */
-
- return guard->acquire_write ();
-}
-
-template <class ACE_LOCK> int
-ACE_TSS_Write_Guard<ACE_LOCK>::tryacquire (void)
-{
-// ACE_TRACE ("ACE_TSS_Write_Guard<ACE_LOCK>::tryacquire");
-
- ACE_Write_Guard<ACE_LOCK> *guard = 0;
-
-#if defined (ACE_HAS_THR_C_DEST)
- ACE_TSS_Adapter *tss_adapter = 0;
- ACE_Thread::getspecific (this->key_, (void **) &tss_adapter);
- guard = (ACE_Guard<ACE_LOCK> *) tss_adapter->ts_obj_;
-#else
- ACE_Thread::getspecific (this->key_, (void **) &guard);
-#endif /* ACE_HAS_THR_C_DEST */
-
- return guard->tryacquire_write ();
-}
-
-template <class ACE_LOCK> int
-ACE_TSS_Write_Guard<ACE_LOCK>::acquire_write (void)
-{
-// ACE_TRACE ("ACE_TSS_Write_Guard<ACE_LOCK>::acquire_write");
-
- return this->acquire ();
-}
-
-template <class ACE_LOCK> int
-ACE_TSS_Write_Guard<ACE_LOCK>::tryacquire_write (void)
-{
-// ACE_TRACE ("ACE_TSS_Write_Guard<ACE_LOCK>::tryacquire_write");
-
- return this->tryacquire ();
-}
-
-template <class ACE_LOCK> void
-ACE_TSS_Write_Guard<ACE_LOCK>::dump (void) const
-{
-// ACE_TRACE ("ACE_TSS_Write_Guard<ACE_LOCK>::dump");
- ACE_TSS_Guard<ACE_LOCK>::dump ();
-}
-
-template <class ACE_LOCK>
-ACE_TSS_Read_Guard<ACE_LOCK>::ACE_TSS_Read_Guard (ACE_LOCK &lock, int block)
-{
-// ACE_TRACE ("ACE_TSS_Read_Guard<ACE_LOCK>::ACE_TSS_Read_Guard");
-
- this->init_key ();
- ACE_Guard<ACE_LOCK> *guard;
- ACE_NEW (guard, ACE_Read_Guard<ACE_LOCK> (lock, block));
-
-#if defined (ACE_HAS_THR_C_DEST)
- ACE_TSS_Adapter *tss_adapter;
- ACE_NEW (tss_adapter,
- ACE_TSS_Adapter ((void *)guard,
- ACE_TSS_Guard<ACE_LOCK>::cleanup));
- ACE_Thread::setspecific (this->key_, (void *) tss_adapter);
-#else
- ACE_Thread::setspecific (this->key_, (void *) guard);
-#endif /* ACE_HAS_THR_C_DEST */
-}
-
-template <class ACE_LOCK> int
-ACE_TSS_Read_Guard<ACE_LOCK>::acquire (void)
-{
-// ACE_TRACE ("ACE_TSS_Read_Guard<ACE_LOCK>::acquire");
-
- ACE_Read_Guard<ACE_LOCK> *guard = 0;
-
-#if defined (ACE_HAS_THR_C_DEST)
- ACE_TSS_Adapter *tss_adapter = 0;
- ACE_Thread::getspecific (this->key_, (void **) &tss_adapter);
- guard = (ACE_Guard<ACE_LOCK> *)tss_adapter->ts_obj_;
-#else
- ACE_Thread::getspecific (this->key_, (void **) &guard);
-#endif /* ACE_HAS_THR_C_DEST */
-
- return guard->acquire_read ();
-}
-
-template <class ACE_LOCK> int
-ACE_TSS_Read_Guard<ACE_LOCK>::tryacquire (void)
-{
-// ACE_TRACE ("ACE_TSS_Read_Guard<ACE_LOCK>::tryacquire");
-
- ACE_Read_Guard<ACE_LOCK> *guard = 0;
-
-#if defined (ACE_HAS_THR_C_DEST)
- ACE_TSS_Adapter *tss_adapter = 0;
- ACE_Thread::getspecific (this->key_, (void **) &tss_adapter);
- guard = (ACE_Guard<ACE_LOCK> *) tss_adapter->ts_obj_;
-#else
- ACE_Thread::getspecific (this->key_, (void **) &guard);
-#endif /* ACE_HAS_THR_C_DEST */
-
- return guard->tryacquire_read ();
-}
-
-template <class ACE_LOCK> int
-ACE_TSS_Read_Guard<ACE_LOCK>::acquire_read (void)
-{
-// ACE_TRACE ("ACE_TSS_Read_Guard<ACE_LOCK>::acquire_read");
-
- return this->acquire ();
-}
-
-template <class ACE_LOCK> int
-ACE_TSS_Read_Guard<ACE_LOCK>::tryacquire_read (void)
-{
-// ACE_TRACE ("ACE_TSS_Read_Guard<ACE_LOCK>::tryacquire_read");
-
- return this->tryacquire ();
-}
-
-template <class ACE_LOCK> void
-ACE_TSS_Read_Guard<ACE_LOCK>::dump (void) const
-{
-// ACE_TRACE ("ACE_TSS_Read_Guard<ACE_LOCK>::dump");
- ACE_TSS_Guard<ACE_LOCK>::dump ();
-}
-
-#endif /* defined (ACE_HAS_THREADS) && (defined (ACE_HAS_THREAD_SPECIFIC_STORAGE) || defined (ACE_HAS_TSS_EMULATION)) */
-#endif /* ACE_SYNCH_T_C */