diff options
author | nobody <nobody@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1996-12-30 06:50:29 +0000 |
---|---|---|
committer | nobody <nobody@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1996-12-30 06:50:29 +0000 |
commit | a4a7690c336d4c8a16b3041c86d501ba38226e96 (patch) | |
tree | 9e9f93a98edd2591453f092d178ad29a1c5fb519 /ace/Task.cpp | |
parent | a5c4d8047ab58df5c45092e18ae503ad40518f0e (diff) | |
download | ATCD-unlabeled-4.1.2.tar.gz |
This commit was manufactured by cvs2svn to create branchunlabeled-4.1.2
'unlabeled-4.1.2'.
Diffstat (limited to 'ace/Task.cpp')
-rw-r--r-- | ace/Task.cpp | 243 |
1 files changed, 0 insertions, 243 deletions
diff --git a/ace/Task.cpp b/ace/Task.cpp deleted file mode 100644 index a1217fff683..00000000000 --- a/ace/Task.cpp +++ /dev/null @@ -1,243 +0,0 @@ -// Task.cpp -// $Id$ - -#define ACE_BUILD_DLL -#include "ace/Task.h" -#include "ace/Module.h" -#include "ace/Service_Config.h" - -#if !defined (__ACE_INLINE__) -#include "ace/Task.i" -#endif /* __ACE_INLINE__ */ - -#if defined (ACE_MT_SAFE) && !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES) -// Lock the creation of the Singleton. -ACE_Thread_Mutex ACE_Task_Exit::ace_task_lock_; -#endif /* defined (ACE_MT_SAFE) && !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES) */ - -ACE_Task_Exit * -ACE_Task_Exit::instance (void) -{ - ACE_TRACE ("ACE_Task_Exit::instance"); - -#if defined (ACE_MT_SAFE) && defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES) - // Lock the creation of the Singleton. This should be inside of - // ACE_Svc_Handler, but GNU G++ is too lame to handle this... - static ACE_Thread_Mutex ace_task_lock_; -#endif /* defined (ACE_MT_SAFE) && defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES) */ - - // Determines if we were dynamically allocated. - static ACE_TSS_TYPE (ACE_Task_Exit) *instance_; - - // Implement the Double Check pattern. - - if (instance_ == 0) - { - ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, ace_task_lock_, 0)); - - if (instance_ == 0) - ACE_NEW_RETURN (instance_, ACE_TSS_TYPE (ACE_Task_Exit), 0); - } - - return ACE_TSS_GET (instance_, ACE_Task_Exit); - -} - -// Grab hold of the Task * so that we can close() it in the -// destructor. - -ACE_Task_Exit::ACE_Task_Exit (void) - : t_ (0), - status_ ((void *) -1) -{ - ACE_TRACE ("ACE_Task_Exit::ACE_Task_Exit"); -} - -// Returns the pointer to the ACE_Task. - -ACE_Task_Base * -ACE_Task_Exit::get_task (void) -{ - ACE_TRACE ("ACE_Task_Exit::get_task"); - - return this->t_; -} - -// Set the this pointer... - -void -ACE_Task_Exit::set_task (ACE_Task_Base *t) -{ - ACE_TRACE ("ACE_Task_Exit::set_task"); - this->t_ = t; - - if (t != 0) - this->tc_.insert (t->thr_mgr ()); -} - -// Set the thread exit status value. - -void * -ACE_Task_Exit::status (void *s) -{ - ACE_TRACE ("ACE_Task_Exit::status"); - return this->status_ = s; -} - -void * -ACE_Task_Exit::status (void) -{ - ACE_TRACE ("ACE_Task_Exit::status"); - return this->status_; -} - -// When this object is destroyed the Task is automatically closed -// down! - -ACE_Task_Exit::~ACE_Task_Exit (void) -{ - ACE_TRACE ("ACE_Task_Exit::~ACE_Task_Exit"); - - if (this->t_ != 0) - { - // The thread count must be decremented first in case the - // close() hook does something crazy like "delete this". - this->t_->thr_count_dec (); - this->t_->close (u_long (this->status_)); - } -} - -ACE_ALLOC_HOOK_DEFINE(ACE_Task) - -ACE_Task_Base::ACE_Task_Base (ACE_Thread_Manager *thr_man) - : thr_count_ (0), - thr_mgr_ (thr_man), - flags_ (0), - grp_id_ (0) -{ -} - -// Get the current group id. -int -ACE_Task_Base::grp_id (void) -{ - ACE_TRACE ("ACE_Task_Base::grp_id"); - ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, -1)); - return this->grp_id_; -} - -// Set the current group id. -void -ACE_Task_Base::grp_id (int id) -{ - ACE_TRACE ("ACE_Task_Base::grp_id"); - ACE_MT (ACE_GUARD (ACE_Thread_Mutex, ace_mon, this->lock_)); - this->grp_id_ = id; -} - -// Suspend a task. -int -ACE_Task_Base::suspend (void) -{ - ACE_TRACE ("ACE_Task_Base::suspend"); - ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, -1)); - if (this->thr_count_ > 0) - return this->thr_mgr_->suspend_task (this); - else - return 0; -} - -// Resume a suspended task. -int -ACE_Task_Base::resume (void) -{ - ACE_TRACE ("ACE_Task_Base::resume"); - ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, -1)); - if (this->thr_count_ > 0) - return this->thr_mgr_->resume_task (this); - else - return 0; -} - -int -ACE_Task_Base::activate (long flags, - int n_threads, - int force_active, - u_int priority, - int grp_id, - ACE_Task_Base *task) -{ - ACE_TRACE ("ACE_Task_Base::activate"); - -#if defined (ACE_MT_SAFE) - ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, -1); - - if (this->thr_count_ > 0 && force_active == 0) - return 1; // Already active. - else - this->thr_count_ += n_threads; - - // Use the ACE_Thread_Manager singleton if we're running as an - // active object and the caller didn't supply us with a - // Thread_Manager. - if (this->thr_mgr_ == 0) - this->thr_mgr_ = ACE_Service_Config::thr_mgr (); - - this->grp_id_ = this->thr_mgr_->spawn_n (n_threads, - ACE_THR_FUNC (&ACE_Task_Base::svc_run), - (void *) this, - flags, - priority, - grp_id, - task); - if (this->grp_id_ == -1) - return -1; - else - return 0; -#else - { - // Keep the compiler from complaining. - n_threads = n_threads; - force_active = force_active; - priority = priority; - grp_id = grp_id; - task = task; - flags = flags; - errno = EINVAL; - return -1; - } -#endif /* ACE_MT_SAFE */ -} - -// Note that this routine often does not return since the thread that -// is executing it will do an ACE_Thread::exit() first! - -void * -ACE_Task_Base::svc_run (void *args) -{ - ACE_TRACE ("ACE_Task_Base::svc_run"); - - ACE_Task_Base *t = (ACE_Task_Base *) args; - - // Obtain our thread-specific exit hook and make sure that it knows - // how to clean us up! - ACE_Task_Exit *exit_hook = ACE_Task_Exit::instance (); - - exit_hook->set_task (t); - - // Call the Task's svc() method. - void *status = (void *) t->svc (); - - return exit_hook->status (status); - /* NOTREACHED */ -} - -// Forward the call to close() so that existing applications don't -// break. - -int -ACE_Task_Base::module_closed (void) -{ - return this->close (1); -} - |