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;
}
1.7.0