Hold Object Manager cleanup (exit) information. More...
#include <Cleanup.h>
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, const char *name=0) |
Use to register a cleanup hook. | |
bool | find (void *object) |
bool | remove (void *object) |
void | call_hooks () |
Private Attributes | |
ACE_Cleanup_Info_Node_List | registered_objects_ |
Hold Object Manager cleanup (exit) information.
For internal use only.
For internal use by the ACE library, only.
Definition at line 117 of file Cleanup.h.
ACE_OS_Exit_Info::ACE_OS_Exit_Info | ( | void | ) |
ACE_OS_Exit_Info::~ACE_OS_Exit_Info | ( | void | ) |
int ACE_OS_Exit_Info::at_exit_i | ( | void * | object, | |
ACE_CLEANUP_FUNC | cleanup_hook, | |||
void * | param, | |||
const char * | name = 0 | |||
) |
Use to register a cleanup hook.
Definition at line 90 of file Cleanup.cpp.
{ // Return -1 and sets errno if unable to allocate storage. Enqueue // at the head and dequeue from the head to get LIFO ordering. ACE_Cleanup_Info_Node *new_node = 0; ACE_NEW_RETURN (new_node, ACE_Cleanup_Info_Node (object, cleanup_hook, param, name), -1); registered_objects_.push_front (new_node); return 0; }
void ACE_OS_Exit_Info::call_hooks | ( | void | ) |
Call all registered cleanup hooks, in reverse order of registration.
Definition at line 152 of file Cleanup.cpp.
{ // Call all registered cleanup hooks, in reverse order of // registration. for (ACE_Cleanup_Info_Node *iter = registered_objects_.pop_front (); iter != 0; iter = registered_objects_.pop_front ()) { if (iter->cleanup_hook () == reinterpret_cast<ACE_CLEANUP_FUNC> ( ACE_CLEANUP_DESTROYER_NAME)) { // The object is an ACE_Cleanup. ACE_CLEANUP_DESTROYER_NAME ( reinterpret_cast<ACE_Cleanup *> (iter->object ()), iter->param ()); } else if (iter->object () == &ace_exit_hook_marker) { // The hook is an ACE_EXIT_HOOK. (* reinterpret_cast<ACE_EXIT_HOOK> (iter->cleanup_hook ())) (); } else { (*iter->cleanup_hook ()) (iter->object (), iter->param ()); } delete iter; } }
bool ACE_OS_Exit_Info::find | ( | void * | object | ) |
Look for a registered cleanup hook object. Returns true if already registered, false if not.
Definition at line 109 of file Cleanup.cpp.
{ for (ACE_Cleanup_Info_Node *iter = registered_objects_.head (); iter != 0; iter = iter->next ()) { if (iter->object () == object) { // The object has already been registered. return true; } } return false; }
bool ACE_OS_Exit_Info::remove | ( | void * | object | ) |
Remove a registered cleanup hook object. Returns true if removed false if not.
Definition at line 126 of file Cleanup.cpp.
{ ACE_Cleanup_Info_Node *node = 0; for (ACE_Cleanup_Info_Node *iter = registered_objects_.head (); iter != 0; iter = iter->next ()) { if (iter->object () == object) { node = iter; break; } } if (node) { registered_objects_.remove (node); delete node; return true; } return false; }