#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 | |
| TYPE * | instance (void) |
| Global access point to the Singleton. | |
| 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 | |
| TAO_TSS_Singleton< TYPE, ACE_LOCK > *& | instance_i (void) |
| Get pointer to the TAO TSS Singleton instance. | |
Static Protected Attributes | |
| 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.
|
||||||||||
|
Default constructor.
Definition at line 19 of file TAO_Singleton.inl.
00020 {
00021 }
|
|
||||||||||
|
|
|
||||||||||
|
Contained instance.
|
|
||||||||||
|
Cleanup method, used by 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 }
|
|
||||||||||
|
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 }
|
|
||||||||||
|
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 }
|
|
||||||||||
|
Get pointer to the TAO TSS Singleton instance.
Definition at line 134 of file TAO_Singleton.cpp. 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 }
|
|
||||||||||
|
|
|
|||||
|
Pointer to the Singleton (ACE_Cleanup) instance.
Definition at line 117 of file TAO_Singleton.cpp. |
1.3.6