#include <TAO_Singleton.h>
Inheritance diagram for TAO_TSS_Singleton< TYPE, ACE_LOCK >:
Public Member Functions | |
virtual void | cleanup (void *param=0) |
Static Public Member Functions | |
static TYPE * | instance (void) |
Global access point to the Singleton. | |
static void | dump (void) |
Dump the state of the object. | |
Protected Member Functions | |
TAO_TSS_Singleton (void) | |
Default constructor. | |
ACE_TSS_TYPE (TYPE) instance_ | |
Contained instance. | |
Static Protected Member Functions | |
static TAO_TSS_Singleton< TYPE, ACE_LOCK > *& | instance_i (void) |
Get pointer to the TAO TSS Singleton instance. | |
Static Protected Attributes | |
static TAO_TSS_Singleton< TYPE, ACE_LOCK > * | singleton_ = 0 |
Pointer to the Singleton (ACE_Cleanup) instance. | |
Private Member Functions | |
void | operator= (const TAO_TSS_Singleton< TYPE, ACE_LOCK > &) |
TAO_TSS_Singleton (const TAO_TSS_Singleton< TYPE, ACE_LOCK > &) |
TAO_Singletons are used by TAO to register TAO-specific singleton instances with the TAO_Object_Manager. This ensures that TAO singletons are isolated from ACE's Object_Manager, thus allowing TAO to be safely dynamically unloaded.
Definition at line 89 of file TAO_Singleton.h.
ACE_INLINE TAO_TSS_Singleton< TYPE, ACE_LOCK >::TAO_TSS_Singleton | ( | void | ) | [protected] |
TAO_TSS_Singleton< TYPE, ACE_LOCK >::TAO_TSS_Singleton | ( | const TAO_TSS_Singleton< TYPE, ACE_LOCK > & | ) | [private] |
TAO_TSS_Singleton< TYPE, ACE_LOCK >::ACE_TSS_TYPE | ( | TYPE | ) | [protected] |
Contained instance.
void TAO_TSS_Singleton< TYPE, ACE_LOCK >::cleanup | ( | void * | param = 0 |
) | [virtual] |
Cleanup method, used by <ace_cleanup_destroyer> to destroy the singleton.
Reimplemented from ACE_Cleanup.
Definition at line 201 of file TAO_Singleton.cpp.
References TAO_TSS_Singleton< TYPE, ACE_LOCK >::instance_i().
00202 { 00203 delete this; 00204 TAO_TSS_Singleton<TYPE, ACE_LOCK>::instance_i () = 0; 00205 }
void TAO_TSS_Singleton< TYPE, ACE_LOCK >::dump | ( | void | ) | [static] |
Dump the state of the object.
Definition at line 122 of file TAO_Singleton.cpp.
References ACE_DEBUG, ACE_END_DUMP, ACE_TEXT, ACE_TRACE, and LM_DEBUG.
00123 { 00124 ACE_TRACE ("TAO_TSS_Singleton<TYPE, ACE_LOCK>::dump"); 00125 00126 #if !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES) 00127 ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("instance_ = %x"), 00128 TAO_TSS_Singleton<TYPE, ACE_LOCK>::instance_i ())); 00129 ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); 00130 #endif /* ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES */ 00131 }
TYPE * TAO_TSS_Singleton< TYPE, ACE_LOCK >::instance | ( | void | ) | [static] |
Global access point to the Singleton.
Definition at line 148 of file TAO_Singleton.cpp.
References ACE_GUARD_RETURN, ACE_NEW_RETURN, ACE_TRACE, ACE_TSS_GET, TAO_Singleton_Manager::at_exit(), TAO_TSS_Singleton< TYPE, ACE_LOCK >::instance_i(), TAO_Singleton_Manager::shutting_down(), and TAO_Singleton_Manager::starting_up().
Referenced by TAO_TSS_Resources::instance().
00149 { 00150 ACE_TRACE ("TAO_TSS_Singleton<TYPE, ACE_LOCK>::instance"); 00151 00152 TAO_TSS_Singleton<TYPE, ACE_LOCK> *&singleton = 00153 TAO_TSS_Singleton<TYPE, ACE_LOCK>::instance_i (); 00154 00155 // Perform the Double-Check pattern... 00156 if (singleton == 0) 00157 { 00158 if (TAO_Singleton_Manager::starting_up () || 00159 TAO_Singleton_Manager::shutting_down ()) 00160 { 00161 // The program is still starting up, and therefore assumed 00162 // to be single threaded. There's no need to double-check. 00163 // Or, the TAO_Singleton_Manager instance has been destroyed, 00164 // so the preallocated lock is not available. Either way, 00165 // don't register for destruction with the 00166 // TAO_Singleton_Manager: we'll have to leak this instance. 00167 00168 ACE_NEW_RETURN (singleton, (TAO_TSS_Singleton<TYPE, ACE_LOCK>), 0); 00169 } 00170 else 00171 { 00172 #if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) 00173 // Obtain a lock from the ACE_Object_Manager. The pointer 00174 // is static, so we only obtain one per TAO_Singleton 00175 // instantiation. 00176 static ACE_LOCK *lock = 0; 00177 if (ACE_Object_Manager::get_singleton_lock (lock) != 0) 00178 // Failed to acquire the lock! 00179 return 0; 00180 00181 ACE_GUARD_RETURN (ACE_LOCK, ace_mon, *lock, 0); 00182 00183 if (singleton == 0) 00184 { 00185 #endif /* ACE_MT_SAFE */ 00186 ACE_NEW_RETURN (singleton, (TAO_TSS_Singleton<TYPE, ACE_LOCK>), 00187 0); 00188 00189 // Register for destruction with TAO_Singleton_Manager. 00190 TAO_Singleton_Manager::at_exit (singleton); 00191 #if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) 00192 } 00193 #endif /* ACE_MT_SAFE */ 00194 } 00195 } 00196 00197 return ACE_TSS_GET (&singleton->instance_, TYPE); 00198 }
TAO_TSS_Singleton< TYPE, ACE_LOCK > *& TAO_TSS_Singleton< TYPE, ACE_LOCK >::instance_i | ( | void | ) | [static, protected] |
Get pointer to the TAO TSS Singleton instance.
Definition at line 134 of file TAO_Singleton.cpp.
References TAO_TSS_Singleton< TYPE, ACE_LOCK >::singleton_.
Referenced by TAO_TSS_Singleton< TYPE, ACE_LOCK >::cleanup(), and TAO_TSS_Singleton< TYPE, ACE_LOCK >::instance().
00135 { 00136 #if defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES) 00137 // Pointer to the Singleton instance. This works around a bug with 00138 // G++ and it's (mis-)handling of templates and statics... 00139 static TAO_TSS_Singleton<TYPE, ACE_LOCK> *singleton_ = 0; 00140 00141 return singleton_; 00142 #else 00143 return TAO_TSS_Singleton<TYPE, ACE_LOCK>::singleton_; 00144 #endif /* ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES */ 00145 }
void TAO_TSS_Singleton< TYPE, ACE_LOCK >::operator= | ( | const TAO_TSS_Singleton< TYPE, ACE_LOCK > & | ) | [private] |
TAO_TSS_Singleton< TYPE, ACE_LOCK > * TAO_TSS_Singleton< TYPE, ACE_LOCK >::singleton_ = 0 [static, protected] |
Pointer to the Singleton (ACE_Cleanup) instance.
Definition at line 112 of file TAO_Singleton.h.
Referenced by TAO_TSS_Singleton< TYPE, ACE_LOCK >::instance_i().