#include <Thread_Exit.h>
Collaboration diagram for ACE_Thread_Exit:

Public Member Functions | |
| ACE_Thread_Exit (void) | |
| Capture the Thread that will be cleaned up automatically. | |
| void | thr_mgr (ACE_Thread_Manager *tm) |
| Set the . | |
| ~ACE_Thread_Exit (void) | |
Static Public Member Functions | |
| ACE_Thread_Exit * | instance (void) |
| Singleton access point. | |
| void | cleanup (void *instance) |
Private Attributes | |
| ACE_Thread_Control | thread_control_ |
Static Private Attributes | |
| unsigned int | is_constructed_ = 0 |
This clever little helper class is stored in thread-specific storage using the wrapper. When a thread exits the <ACE_TSS::cleanup> function deletes this object, thereby closing it down gracefully.
Definition at line 42 of file Thread_Exit.h.
|
|
Capture the Thread that will be cleaned up automatically.
Definition at line 73 of file Thread_Exit.cpp. References ACE_OS_TRACE.
00074 {
00075 ACE_OS_TRACE ("ACE_Thread_Exit::ACE_Thread_Exit");
00076 }
|
|
|
Destructor calls the thread-specific exit hooks when a thread exits. Definition at line 92 of file Thread_Exit.cpp. References ACE_OS_TRACE.
00093 {
00094 ACE_OS_TRACE ("ACE_Thread_Exit::~ACE_Thread_Exit");
00095 }
|
|
|
Cleanup method, used by the to destroy the singleton. Definition at line 15 of file Thread_Exit.cpp. References ACE_OS_TRACE, ACE_TSS_TYPE, and is_constructed_. Referenced by ACE_Thread_Manager::close_singleton().
00016 {
00017 ACE_OS_TRACE ("ACE_Thread_Exit::cleanup");
00018
00019 delete (ACE_TSS_TYPE (ACE_Thread_Exit) *) instance;
00020
00021 // Set the thr_exit_ static to null to keep things from crashing if
00022 // ACE::fini() is enabled here.
00023 ACE_Thread_Manager::thr_exit_ = 0;
00024
00025 ACE_Thread_Exit::is_constructed_ = 0;
00026 // All TSS objects have been destroyed. Reset this flag so
00027 // ACE_Thread_Exit singleton can be created again.
00028 }
|
|
|
Singleton access point.
Definition at line 35 of file Thread_Exit.cpp. References ACE_GUARD_RETURN, ACE_NEW_RETURN, ACE_OS_TRACE, ACE_TSS_GET, ACE_TSS_TYPE, is_constructed_, and ACE_Thread_Manager::set_thr_exit(). Referenced by ACE_Thread_Manager::exit(), and ACE_Thread_Adapter::invoke().
00036 {
00037 #if defined (ACE_HAS_THREAD_SPECIFIC_STORAGE) || defined (ACE_HAS_TSS_EMULATION)
00038 ACE_OS_TRACE ("ACE_Thread_Exit::instance");
00039
00040 // Determines if we were dynamically allocated.
00041 static ACE_TSS_TYPE (ACE_Thread_Exit) *instance_;
00042
00043 // Implement the Double Check pattern.
00044
00045 if (ACE_Thread_Exit::is_constructed_ == 0)
00046 {
00047 ACE_MT (ACE_Thread_Mutex *lock =
00048 ACE_Managed_Object<ACE_Thread_Mutex>::get_preallocated_object
00049 (ACE_Object_Manager::ACE_THREAD_EXIT_LOCK);
00050 ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, *lock, 0));
00051
00052 if (ACE_Thread_Exit::is_constructed_ == 0)
00053 {
00054 ACE_NEW_RETURN (instance_,
00055 ACE_TSS_TYPE (ACE_Thread_Exit),
00056 0);
00057
00058 ACE_Thread_Exit::is_constructed_ = 1;
00059
00060 ACE_Thread_Manager::set_thr_exit (instance_);
00061 }
00062 }
00063
00064 return ACE_TSS_GET (instance_, ACE_Thread_Exit);
00065 #else
00066 return 0;
00067 #endif /* ACE_HAS_THREAD_SPECIFIC_STORAGE || ACE_HAS_TSS_EMULATION */
00068 }
|
|
|
Set the .
Definition at line 81 of file Thread_Exit.cpp. References ACE_OS_TRACE, ACE_Thread_Control::insert(), and thread_control_. Referenced by ACE_Thread_Adapter::invoke().
00082 {
00083 ACE_OS_TRACE ("ACE_Thread_Exit::thr_mgr");
00084
00085 if (tm != 0)
00086 this->thread_control_.insert (tm, 0);
00087 }
|
|
|
Used to detect whether we should create a new instance (or not) within the instance method -- we don't trust the instance_ ptr because the destructor may have run (if ACE::fini() was called). See bug #526. We don't follow the singleton pattern due to dependency issues. Definition at line 12 of file Thread_Exit.cpp. Referenced by cleanup(), and instance(). |
|
|
Automatically add/remove the thread from the . Definition at line 65 of file Thread_Exit.h. Referenced by thr_mgr(). |
1.3.6