#include <Cleanup.h>
Collaboration diagram for ACE_OS_Exit_Info:

Public Member Functions | |
| ACE_OS_Exit_Info (void) | |
| Default constructor. | |
| ~ACE_OS_Exit_Info (void) | |
| Destructor. | |
| int | at_exit_i (void *object, ACE_CLEANUP_FUNC cleanup_hook, void *param) |
| Use to register a cleanup hook. | |
| int | find (void *object) |
| void | call_hooks () |
Private Attributes | |
| ACE_Cleanup_Info_Node * | registered_objects_ |
For internal use by the ACE library, only.
Definition at line 97 of file Cleanup.h.
|
|
Default constructor.
Definition at line 115 of file Cleanup.cpp. References ACE_NEW, and registered_objects_.
00116 {
00117 ACE_NEW (registered_objects_, ACE_Cleanup_Info_Node);
00118 }
|
|
|
Destructor.
Definition at line 120 of file Cleanup.cpp. References registered_objects_.
00121 {
00122 delete registered_objects_;
00123 registered_objects_ = 0;
00124 }
|
|
||||||||||||||||
|
Use to register a cleanup hook.
Definition at line 127 of file Cleanup.cpp. References ACE_CLEANUP_FUNC, ACE_Cleanup_Info::cleanup_hook_, ACE_Cleanup_Info_Node::insert(), ACE_Cleanup_Info::object_, ACE_Cleanup_Info::param_, and registered_objects_. Referenced by ACE_OS_Object_Manager::at_exit(), and ACE_Object_Manager::at_exit_i().
00130 {
00131 ACE_Cleanup_Info new_info;
00132 new_info.object_ = object;
00133 new_info.cleanup_hook_ = cleanup_hook;
00134 new_info.param_ = param;
00135
00136 // Return -1 and sets errno if unable to allocate storage. Enqueue
00137 // at the head and dequeue from the head to get LIFO ordering.
00138
00139 ACE_Cleanup_Info_Node *new_node = 0;
00140
00141 if ((new_node = registered_objects_->insert (new_info)) == 0)
00142 return -1;
00143 else
00144 {
00145 registered_objects_ = new_node;
00146 return 0;
00147 }
00148 }
|
|
|
Call all registered cleanup hooks, in reverse order of registration. Definition at line 169 of file Cleanup.cpp. References ACE_CLEANUP_DESTROYER_NAME, ace_exit_hook_marker, ACE_Cleanup_Info::cleanup_hook_, ACE_Cleanup_Info_Node::cleanup_info_, ACE_Cleanup_Info_Node::next_, ACE_Cleanup_Info::object_, ACE_Cleanup_Info::param_, and registered_objects_. Referenced by ACE_OS_Object_Manager::fini(), and ACE_Object_Manager::fini().
00170 {
00171 // Call all registered cleanup hooks, in reverse order of
00172 // registration.
00173 for (ACE_Cleanup_Info_Node *iter = registered_objects_;
00174 iter && iter->next_ != 0;
00175 iter = iter->next_)
00176 {
00177 ACE_Cleanup_Info &info = iter->cleanup_info_;
00178 if (info.cleanup_hook_ == reinterpret_cast<ACE_CLEANUP_FUNC> (
00179 ACE_CLEANUP_DESTROYER_NAME))
00180 // The object is an ACE_Cleanup.
00181 ACE_CLEANUP_DESTROYER_NAME (
00182 reinterpret_cast<ACE_Cleanup *> (info.object_),
00183 info.param_);
00184 else if (info.object_ == &ace_exit_hook_marker)
00185 // The hook is an ACE_EXIT_HOOK.
00186 (* reinterpret_cast<ACE_EXIT_HOOK> (info.cleanup_hook_)) ();
00187 else
00188 (*info.cleanup_hook_) (info.object_, info.param_);
00189 }
00190 }
|
|
|
Look for a registered cleanup hook object. Returns 1 if already registered, 0 if not. Definition at line 151 of file Cleanup.cpp. References ACE_Cleanup_Info_Node::cleanup_info_, ACE_Cleanup_Info_Node::next_, ACE_Cleanup_Info::object_, and registered_objects_. Referenced by ACE_Object_Manager::at_exit_i().
00152 {
00153 // Check for already in queue, and return 1 if so.
00154 for (ACE_Cleanup_Info_Node *iter = registered_objects_;
00155 iter && iter->next_ != 0;
00156 iter = iter->next_)
00157 {
00158 if (iter->cleanup_info_.object_ == object)
00159 {
00160 // The object has already been registered.
00161 return 1;
00162 }
00163 }
00164
00165 return 0;
00166 }
|
|
|
Keeps track of all registered objects. The last node is only used to terminate the list (it doesn't contain a valid ACE_Cleanup_Info). Definition at line 123 of file Cleanup.h. Referenced by ACE_OS_Exit_Info(), at_exit_i(), call_hooks(), find(), and ~ACE_OS_Exit_Info(). |
1.3.6