server/dep/ACE_wrappers/ace/Thread_Control.cpp
zerg b8d773091a [10874] Update ACE to v5.8.3
(based on zergtmn's repo commit 3a8c259)
(based on zergtmn's repo commit 946c1a8)

Signed-off-by: VladimirMangos <vladimir@getmangos.com>
2010-12-14 17:37:42 +03:00

85 lines
2 KiB
C++

// $Id: Thread_Control.cpp 91688 2010-09-09 11:21:50Z johnnyw $
#include "ace/Thread_Control.h"
#include "ace/Thread_Manager.h"
#if !defined (ACE_HAS_INLINED_OSCALLS)
# include "ace/Thread_Control.inl"
#endif /* ACE_HAS_INLINED_OSCALLS */
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
void
ACE_Thread_Control::dump (void) const
{
#if defined (ACE_HAS_DUMP)
ACE_OS_TRACE ("ACE_Thread_Control::dump");
#endif /* ACE_HAS_DUMP */
}
int
ACE_Thread_Control::insert (ACE_Thread_Manager *tm, int insert)
{
ACE_OS_TRACE ("ACE_Thread_Control::insert");
ACE_hthread_t t_id;
ACE_OS::thr_self (t_id);
this->tm_ = tm;
if (insert)
return this->tm_->insert_thr (ACE_OS::thr_self (), t_id);
else
return 0;
}
// Initialize the thread controller.
ACE_Thread_Control::ACE_Thread_Control (ACE_Thread_Manager *t,
int insert)
: tm_ (t),
status_ (0)
{
ACE_OS_TRACE ("ACE_Thread_Control::ACE_Thread_Control");
if (this->tm_ != 0 && insert)
{
ACE_hthread_t t_id;
ACE_OS::thr_self (t_id);
this->tm_->insert_thr (ACE_OS::thr_self (), t_id);
}
}
// Automatically kill thread on exit.
ACE_Thread_Control::~ACE_Thread_Control (void)
{
ACE_OS_TRACE ("ACE_Thread_Control::~ACE_Thread_Control");
#if defined (ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS) || defined (ACE_HAS_TSS_EMULATION) || defined (ACE_WIN32)
this->exit (this->status_, 0);
#else
this->exit (this->status_, 1);
#endif /* ACE_HAS_RECURSIVE_THR_EXIT_SEMANTICS */
}
// Exit from thread (but clean up first).
ACE_THR_FUNC_RETURN
ACE_Thread_Control::exit (ACE_THR_FUNC_RETURN exit_status, int do_thr_exit)
{
ACE_OS_TRACE ("ACE_Thread_Control::exit");
if (this->tm_ != 0)
return this->tm_->exit (exit_status, do_thr_exit);
else
{
#if !defined (ACE_HAS_TSS_EMULATION)
// With ACE_HAS_TSS_EMULATION, we let ACE_Thread_Adapter::invoke ()
// exit the thread after cleaning up TSS.
ACE_OS::thr_exit (exit_status);
#endif /* ! ACE_HAS_TSS_EMULATION */
return 0;
}
}
ACE_END_VERSIONED_NAMESPACE_DECL